diff --git a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt index fd42ef70498..589f800397e 100644 --- a/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt +++ b/eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt @@ -153,8 +153,7 @@ class JDIEval( mayThrow { _class.setValue(field, jdiValue) } } - private fun findMethod(methodDesc: MethodDescription): jdi.Method { - val _class = methodDesc.ownerType.asReferenceType() + private fun findMethod(methodDesc: MethodDescription, _class: jdi.ReferenceType = methodDesc.ownerType.asReferenceType()): jdi.Method { val method = when (_class) { is jdi.ClassType -> { val m = _class.concreteMethodByName(methodDesc.name, methodDesc.desc) @@ -212,9 +211,9 @@ class JDIEval( throw UnsupportedOperationException("invokespecial is not suported yet") } } - val method = findMethod(methodDesc) val obj = instance.jdiObj.checkNull() + val method = findMethod(methodDesc, instance.jdiObj!!.referenceType() ?: methodDesc.ownerType.asReferenceType()) val args = mapArguments(arguments, method.safeArgumentTypes()) val result = mayThrow { obj.invokeMethod(thread, method, args, 0) } return result.asValue() diff --git a/eval4j/test/org/jetbrains/eval4j/test/TestData.java b/eval4j/test/org/jetbrains/eval4j/test/TestData.java index 729704d80cc..addfad34638 100644 --- a/eval4j/test/org/jetbrains/eval4j/test/TestData.java +++ b/eval4j/test/org/jetbrains/eval4j/test/TestData.java @@ -656,6 +656,11 @@ class TestData { static Class c() { return null; } } + + static int numberIntValue() { + Number n = 1; + return n.intValue(); + } }