JDIEval: allow classLoader to be null (load class from caller classloader)

This commit is contained in:
Natalia Ukhorskaya
2015-02-25 14:21:27 +03:00
parent b0422990d9
commit 957d1c19c5
+14 -1
View File
@@ -29,7 +29,7 @@ val BOOTSTRAP_CLASS_DESCRIPTORS = setOf("Ljava/lang/String;", "Ljava/lang/ClassL
public class JDIEval( public class JDIEval(
private val vm: jdi.VirtualMachine, private val vm: jdi.VirtualMachine,
private val classLoader: jdi.ClassLoaderReference, private val classLoader: jdi.ClassLoaderReference?,
private val thread: jdi.ThreadReference, private val thread: jdi.ThreadReference,
private val invokePolicy: Int private val invokePolicy: Int
) : Eval { ) : Eval {
@@ -53,6 +53,18 @@ public class JDIEval(
return loadedClass.classObject().asValue() return loadedClass.classObject().asValue()
} }
} }
if (classLoader == null) {
return invokeStaticMethod(
MethodDescription(
CLASS.getInternalName(),
"forName",
"(Ljava/lang/String;)Ljava/lang/Class;",
true
),
listOf(vm.mirrorOf(classType.getInternalName().replace('/', '.')).asValue())
)
}
else {
return invokeStaticMethod( return invokeStaticMethod(
MethodDescription( MethodDescription(
CLASS.getInternalName(), CLASS.getInternalName(),
@@ -67,6 +79,7 @@ public class JDIEval(
) )
) )
} }
}
override fun loadString(str: String): Value = vm.mirrorOf(str).asValue() override fun loadString(str: String): Value = vm.mirrorOf(str).asValue()