From 88bb11383458fe4714a13156fd86b07a88be72b7 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 13 Oct 2013 15:36:21 +0400 Subject: [PATCH] Prevent infinite recursion in loadClass() --- src/org/jetbrains/eval4j/jdi/jdiEval.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/src/org/jetbrains/eval4j/jdi/jdiEval.kt index f9e09e380cc..e7dc6b4fce0 100644 --- a/src/org/jetbrains/eval4j/jdi/jdiEval.kt +++ b/src/org/jetbrains/eval4j/jdi/jdiEval.kt @@ -12,14 +12,22 @@ class JDIEval( private val thread: jdi.ThreadReference ) : Eval { override fun loadClass(classType: Type): Value { + val loadedClasses = vm.classesByName(classType.getInternalName()) + if (!loadedClasses.isEmpty()) { + return loadedClasses[0].classObject().asValue() + } return invokeStaticMethod( MethodDescription( CLASS.getInternalName(), "forName", - "(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;", + "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;", true ), - listOf(classLoader.asValue()) + listOf( + vm.mirrorOf(classType.getInternalName().replace('/', '.')).asValue(), + boolean(true), + classLoader.asValue() + ) ) }