From 86e8b7767b4c31646674ca7457588e2af07bda89 Mon Sep 17 00:00:00 2001 From: Gilles Duboscq Date: Thu, 6 Nov 2025 17:22:41 +0100 Subject: [PATCH] Fix unique proxy name for unnamed package. --- .../proxy/ProxyRenamingSubstitutionProcessor.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRenamingSubstitutionProcessor.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRenamingSubstitutionProcessor.java index 3a148617252f..69e9b4b72f52 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRenamingSubstitutionProcessor.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRenamingSubstitutionProcessor.java @@ -53,7 +53,7 @@ public class ProxyRenamingSubstitutionProcessor extends SubstitutionProcessor { public static final String NULL_CLASS_LOADER_NAME = "native-image-null-class-loader"; public static final String NULL_MODULE_NAME = "native-image-null-module"; public static final String UNNAMED_MODULE_NAME = "native-image-unnamed"; - private static final String STABLE_NAME_TEMPLATE = "/$Proxy.s"; + private static final String STABLE_NAME_TEMPLATE = "$Proxy.s"; private final ConcurrentMap typeSubstitutions = new ConcurrentHashMap<>(); private final Set uniqueTypeNames = new HashSet<>(); @@ -127,12 +127,17 @@ public String getUniqueProxyName(Class clazz) { } private String findUniqueName(Class clazz, int hashCode) { - CharSequence baseName = "L" + clazz.getPackageName().replace('.', '/') + STABLE_NAME_TEMPLATE + Integer.toHexString(hashCode); - String name = baseName + ";"; + CharSequence baseName; + if (clazz.getPackageName().isEmpty()) { + baseName = STABLE_NAME_TEMPLATE + Integer.toHexString(hashCode); + } else { + baseName = clazz.getPackageName().replace('.', '/') + '/' + STABLE_NAME_TEMPLATE + Integer.toHexString(hashCode); + } + String name = "L" + baseName + ";"; synchronized (uniqueTypeNames) { int suffix = 1; while (uniqueTypeNames.contains(name)) { - name = baseName + "_" + suffix + ";"; + name = "L" + baseName + "_" + suffix + ";"; suffix++; } uniqueTypeNames.add(name);