From 93d668ad632ec9c2f7f57ce40b42d8e9554b6fc4 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 23 May 2018 21:40:13 +0300 Subject: [PATCH] Support types without backing ClassLoader in 'safeArgumentTypes()' (EA-120387) --- .../src/org/jetbrains/eval4j/jdi/jdiEval.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt index f43e92fcba7..a255ea582dc 100644 --- a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt +++ b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt @@ -423,9 +423,27 @@ class JDIEval( private fun Method.safeArgumentTypes(): List { try { return argumentTypes() - } - catch (e: ClassNotLoadedException) { - return argumentTypeNames()!!.map { name -> loadClassByName(name, declaringType().classLoader()) } + } catch (e: ClassNotLoadedException) { + return argumentTypeNames()!!.map { name -> + val classLoader = declaringType()?.classLoader() + if (classLoader != null) { + return@map loadClassByName(name, classLoader) + } + + when (name) { + "void" -> virtualMachine().mirrorOfVoid().type() + "boolean" -> primitiveTypes.getValue(Type.BOOLEAN_TYPE.className) + "byte" -> primitiveTypes.getValue(Type.BYTE_TYPE.className) + "char" -> primitiveTypes.getValue(Type.CHAR_TYPE.className) + "short" -> primitiveTypes.getValue(Type.SHORT_TYPE.className) + "int" -> primitiveTypes.getValue(Type.INT_TYPE.className) + "long" -> primitiveTypes.getValue(Type.LONG_TYPE.className) + "float" -> primitiveTypes.getValue(Type.FLOAT_TYPE.className) + "double" -> primitiveTypes.getValue(Type.DOUBLE_TYPE.className) + else -> virtualMachine().classesByName(name).firstOrNull() + ?: throw IllegalStateException("Unknown class $name") + } + } } } }