Skip to content

Commit 8cc69f8

Browse files
committed
fix InterpreterResolvedJAvaField.getType(), so it uses a registry lookup instead of a load
1 parent 2b96e47 commit 8cc69f8

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/crema/CremaSupport.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626

2727
import java.util.List;
2828

29-
import com.oracle.svm.core.hub.DynamicHub;
3029
import org.graalvm.nativeimage.ImageSingletons;
3130
import org.graalvm.nativeimage.Platform;
3231
import org.graalvm.nativeimage.Platforms;
3332

33+
import com.oracle.svm.core.hub.DynamicHub;
3434
import com.oracle.svm.espresso.classfile.ParserKlass;
3535

3636
import jdk.vm.ci.meta.JavaType;
@@ -67,6 +67,8 @@ interface CremaDispatchTable {
6767

6868
Class<?> resolveOrNull(JavaType unresolvedJavaType, ResolvedJavaType accessingClass);
6969

70+
Class<?> findLoadedClass(JavaType unresolvedJavaType, ResolvedJavaType accessingClass);
71+
7072
static CremaSupport singleton() {
7173
return ImageSingletons.lookup(CremaSupport.class);
7274
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public final JavaType getType() {
214214
return resolvedType;
215215
}
216216

217-
public final InterpreterResolvedJavaType getResolvedType() {
217+
public InterpreterResolvedJavaType getResolvedType() {
218218
if (resolvedType == null) {
219219
Class<?> cls = CremaSupport.singleton().resolveOrThrow(UnresolvedJavaType.create(typeSymbol.toString()), getDeclaringClass());
220220
resolvedType = (InterpreterResolvedJavaType) DynamicHub.fromClass(cls).getInterpreterType();

substratevm/src/com.oracle.svm.interpreter/src/com/oracle/svm/interpreter/CremaSupportImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,14 @@ private static Class<?> loadClass(JavaType unresolvedJavaType, InterpreterResolv
590590
return registry.loadClass(symbolicType);
591591
}
592592

593+
@Override
594+
public Class<?> findLoadedClass(JavaType unresolvedJavaType, ResolvedJavaType accessingClass) {
595+
ByteSequence type = ByteSequence.create(unresolvedJavaType.getName());
596+
Symbol<Type> symbolicType = SymbolsSupport.getTypes().getOrCreateValidType(type);
597+
AbstractClassRegistry registry = ClassRegistries.singleton().getRegistry(((InterpreterResolvedJavaType) accessingClass).getJavaClass().getClassLoader());
598+
return registry.findLoadedClass(symbolicType);
599+
}
600+
593601
@Override
594602
public Object execute(ResolvedJavaMethod targetMethod, Object[] args) {
595603
return Interpreter.execute((InterpreterResolvedJavaMethod) targetMethod, args);

substratevm/src/com.oracle.svm.jdwp.resident/src/com/oracle/svm/jdwp/resident/impl/ResidentJDWP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1802,7 +1802,7 @@ private static void sharedWriteField(Packet.Reader reader, Object typeOrReceiver
18021802
case Object -> {
18031803
assert !field.isWordStorage() : field; // handled above
18041804
Object value = readReferenceOrNull(reader);
1805-
if (value != null && !field.getType().getJavaClass().isInstance(value)) {
1805+
if (value != null && !field.getResolvedType().getJavaClass().isInstance(value)) {
18061806
throw JDWPException.raise(ErrorCode.TYPE_MISMATCH);
18071807
}
18081808
InterpreterToVM.setFieldObject(value, receiver, field);

0 commit comments

Comments
 (0)