diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java index a0e6fb6249ba..48f9ec7ec6aa 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java @@ -1528,11 +1528,21 @@ public String getPackageName() { return companion.getPackageName(this); } + private boolean isHybrid() { + if (SubstrateUtil.HOSTED) { + return AnnotationAccess.isAnnotationPresent(hostedJavaClass, Hybrid.class); + } else { + return LayoutEncoding.isHybrid(getLayoutEncoding()); + } + } + String computePackageName() { String pn = null; DynamicHub me = this; - while (me.hubIsArray()) { - me = me.getComponentType(); + if (!isHybrid()) { + while (me.hubIsArray()) { + me = me.getComponentType(); + } } if (me.isPrimitive()) { pn = "java.lang"; diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java index c1fc48bfc24a..d58a27506737 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java @@ -56,6 +56,7 @@ import com.oracle.svm.hosted.jdk.HostedClassLoaderPackageManagement; import com.oracle.svm.util.ReflectionUtil; +import jdk.graal.compiler.debug.Assertions; import jdk.vm.ci.meta.ConstantReflectionProvider; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.ResolvedJavaField; @@ -172,6 +173,7 @@ private static void registerPackage(ImageHeapScanner heapScanner, Class javaC ClassLoader runtimeClassLoader = ClassLoaderFeature.getRuntimeClassLoader(classloader); VMError.guarantee(runtimeClassLoader != null, "Class loader missing for class %s", hub.getName()); String packageName = hub.getPackageName(); + assert packageName.equals(packageValue.getName()) : Assertions.errorMessage("Package name mismatch:", packageName, packageValue.getName()); HostedClassLoaderPackageManagement.singleton().registerPackage(runtimeClassLoader, packageName, packageValue, heapScanner::rescanObject); } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/HostedClassLoaderPackageManagement.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/HostedClassLoaderPackageManagement.java index 3035780d678a..6adbb1ec9eba 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/HostedClassLoaderPackageManagement.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/HostedClassLoaderPackageManagement.java @@ -215,12 +215,12 @@ public void registerPackage(ClassLoader runtimeClassLoader, String packageName, /* Scan the class loader packages if the new package was missing. */ objectScanner.accept(loaderPackages); if (inSharedLayer && runtimeClassLoader == appClassLoader) { + VMError.guarantee(packageValue.getName().equals(packageName), "Package name is different from package value's name: %s %s", packageName, packageValue); + /* * We must register this package so that it can be relinked in subsequent layers. */ registry.registerHeapConstant(generateKeyName(packageValue.getName()), packageValue); - - VMError.guarantee(packageValue.getName().equals(packageName), "Package name is different from package value's name: %s %s", packageName, packageValue); } } }