From 957d1c19c55af9d911118c1e5454c32c25c1a07d Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Wed, 25 Feb 2015 14:21:27 +0300 Subject: [PATCH] JDIEval: allow classLoader to be null (load class from caller classloader) --- .../src/org/jetbrains/eval4j/jdi/jdiEval.kt | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt index 2f678348524..a748c72047e 100644 --- a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt +++ b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt @@ -29,7 +29,7 @@ val BOOTSTRAP_CLASS_DESCRIPTORS = setOf("Ljava/lang/String;", "Ljava/lang/ClassL public class JDIEval( private val vm: jdi.VirtualMachine, - private val classLoader: jdi.ClassLoaderReference, + private val classLoader: jdi.ClassLoaderReference?, private val thread: jdi.ThreadReference, private val invokePolicy: Int ) : Eval { @@ -53,19 +53,32 @@ public class JDIEval( return loadedClass.classObject().asValue() } } - return invokeStaticMethod( - MethodDescription( - CLASS.getInternalName(), - "forName", - "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", - true - ), - listOf( - vm.mirrorOf(classType.getInternalName().replace('/', '.')).asValue(), - boolean(true), - classLoader.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( + MethodDescription( + CLASS.getInternalName(), + "forName", + "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", + true + ), + listOf( + vm.mirrorOf(classType.getInternalName().replace('/', '.')).asValue(), + boolean(true), + classLoader.asValue() + ) + ) + } } override fun loadString(str: String): Value = vm.mirrorOf(str).asValue()