From 684ed47edbe84128b2092b4c2e652a320bce59f3 Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Fri, 13 Oct 2017 16:26:29 +0300 Subject: [PATCH] IDEA-179928 Java debugger: super.foo() is evaluated incorrectly --- .../engine/evaluation/expression/MethodEvaluator.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java index 00f171211952..4e28d2fd0bb5 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/MethodEvaluator.java @@ -93,12 +93,6 @@ public class MethodEvaluator implements Evaluator { else if (isInvokableType(object)) { referenceType = (ReferenceType)object; } - else { - final String className = myClassName != null ? myClassName.getName(debugProcess) : null; - if (className != null) { - referenceType = debugProcess.findClass(context, className, context.getClassLoader()); - } - } if (referenceType == null) { throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException( @@ -126,6 +120,10 @@ public class MethodEvaluator implements Evaluator { ReferenceType _refType = referenceType; if (requiresSuperObject && (referenceType instanceof ClassType)) { _refType = ((ClassType)referenceType).superclass(); + String className = myClassName != null ? myClassName.getName(debugProcess) : null; + if (_refType == null || (className != null && !className.equals(_refType.name()))) { + _refType = debugProcess.findClass(context, className, context.getClassLoader()); + } } Method jdiMethod = DebuggerUtils.findMethod(_refType, myMethodName, signature); if (signature == null) {