From 9fea5460a8df4fa7e24384a80a47eb5409ad4b0f Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 8 Apr 2014 15:53:39 +0400 Subject: [PATCH] Find method in class that is on stack, not in method owner class --- eval4j/src/org/jetbrains/eval4j/jdi/jdiEval.kt | 5 ++--- eval4j/test/org/jetbrains/eval4j/test/TestData.java | 5 +++++ 2 files changed, 7 insertions(+), 3 deletions(-) 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(); + } }