Skip to content

Commit 0ad8c3f

Browse files
committed
[GR-59959] Change package name computation for hybrid objects.
PullRequest: graal/19375
2 parents d79ab18 + 7e69cd7 commit 0ad8c3f

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -1528,11 +1528,21 @@ public String getPackageName() {
15281528
return companion.getPackageName(this);
15291529
}
15301530

1531+
private boolean isHybrid() {
1532+
if (SubstrateUtil.HOSTED) {
1533+
return AnnotationAccess.isAnnotationPresent(hostedJavaClass, Hybrid.class);
1534+
} else {
1535+
return LayoutEncoding.isHybrid(getLayoutEncoding());
1536+
}
1537+
}
1538+
15311539
String computePackageName() {
15321540
String pn = null;
15331541
DynamicHub me = this;
1534-
while (me.hubIsArray()) {
1535-
me = me.getComponentType();
1542+
if (!isHybrid()) {
1543+
while (me.hubIsArray()) {
1544+
me = me.getComponentType();
1545+
}
15361546
}
15371547
if (me.isPrimitive()) {
15381548
pn = "java.lang";

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.oracle.svm.hosted.jdk.HostedClassLoaderPackageManagement;
5757
import com.oracle.svm.util.ReflectionUtil;
5858

59+
import jdk.graal.compiler.debug.Assertions;
5960
import jdk.vm.ci.meta.ConstantReflectionProvider;
6061
import jdk.vm.ci.meta.JavaKind;
6162
import jdk.vm.ci.meta.ResolvedJavaField;
@@ -172,6 +173,7 @@ private static void registerPackage(ImageHeapScanner heapScanner, Class<?> javaC
172173
ClassLoader runtimeClassLoader = ClassLoaderFeature.getRuntimeClassLoader(classloader);
173174
VMError.guarantee(runtimeClassLoader != null, "Class loader missing for class %s", hub.getName());
174175
String packageName = hub.getPackageName();
176+
assert packageName.equals(packageValue.getName()) : Assertions.errorMessage("Package name mismatch:", packageName, packageValue.getName());
175177
HostedClassLoaderPackageManagement.singleton().registerPackage(runtimeClassLoader, packageName, packageValue, heapScanner::rescanObject);
176178
}
177179
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/HostedClassLoaderPackageManagement.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -215,12 +215,12 @@ public void registerPackage(ClassLoader runtimeClassLoader, String packageName,
215215
/* Scan the class loader packages if the new package was missing. */
216216
objectScanner.accept(loaderPackages);
217217
if (inSharedLayer && runtimeClassLoader == appClassLoader) {
218+
VMError.guarantee(packageValue.getName().equals(packageName), "Package name is different from package value's name: %s %s", packageName, packageValue);
219+
218220
/*
219221
* We must register this package so that it can be relinked in subsequent layers.
220222
*/
221223
registry.registerHeapConstant(generateKeyName(packageValue.getName()), packageValue);
222-
223-
VMError.guarantee(packageValue.getName().equals(packageName), "Package name is different from package value's name: %s %s", packageName, packageValue);
224224
}
225225
}
226226
}

0 commit comments

Comments
 (0)