Support types without backing ClassLoader in 'safeArgumentTypes()' (EA-120387)

This commit is contained in:
Yan Zhulanow
2018-05-23 21:40:13 +03:00
parent 64ea16fdfc
commit 93d668ad63
+21 -3
View File
@@ -423,9 +423,27 @@ class JDIEval(
private fun Method.safeArgumentTypes(): List<jdi_Type> {
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")
}
}
}
}
}