Skip to content

Commit 2cdb555

Browse files
Fix CremaMethodAccess.toSymbol for signature with proxies
1 parent 88d2e17 commit 2cdb555

File tree

1 file changed

+9
-5
lines changed
  • substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata

1 file changed

+9
-5
lines changed

substratevm/src/com.oracle.svm.interpreter.metadata/src/com/oracle/svm/interpreter/metadata/CremaMethodAccess.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,15 @@ static InterpreterResolvedJavaMethod toJVMCI(Executable executable) {
8888
*/
8989
name = SymbolsSupport.getNames().lookup(executable.getName());
9090
}
91+
// hidden classes and SVM stable proxy name contain a `.`, replace with a `+`
9192
StringBuilder sb = new StringBuilder();
9293
sb.append('(');
9394
for (Class<?> type : executable.getParameterTypes()) {
94-
sb.append(type.descriptorString());
95+
sb.append(type.descriptorString().replace('.', '+'));
9596
}
9697
sb.append(')');
9798
if (executable instanceof Method method) {
98-
sb.append(method.getReturnType().descriptorString());
99+
sb.append(method.getReturnType().descriptorString().replace('.', '+'));
99100
} else {
100101
assert executable instanceof Constructor;
101102
sb.append('V');
@@ -105,14 +106,17 @@ static InterpreterResolvedJavaMethod toJVMCI(Executable executable) {
105106
}
106107

107108
static Symbol<Signature> toSymbol(InterpreterUnresolvedSignature jvmciSignature, SignatureSymbols signatures) {
109+
// hidden classes and SVM stable proxy name contain a `.`, replace with a `+`
108110
StringBuilder sb = new StringBuilder();
109111
sb.append('(');
110112
for (int i = 0; i < jvmciSignature.getParameterCount(false); i++) {
111-
sb.append(jvmciSignature.getParameterType(i, null).getName());
113+
sb.append(jvmciSignature.getParameterType(i, null).getName().replace('.', '+'));
112114
}
113115
sb.append(')');
114-
sb.append(jvmciSignature.getReturnType(null).getName());
115-
return signatures.getOrCreateValidSignature(ByteSequence.create(sb.toString()));
116+
sb.append(jvmciSignature.getReturnType(null).getName().replace('.', '+'));
117+
Symbol<Signature> symbol = signatures.getOrCreateValidSignature(ByteSequence.create(sb.toString()));
118+
assert symbol != null : jvmciSignature;
119+
return symbol;
116120
}
117121

118122
static JavaType toJavaType(Symbol<Type> typeSymbol) {

0 commit comments

Comments
 (0)