From 326ca8619c2e71fb579dc1eb85415dbeb26dbabc Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Fri, 31 Oct 2014 19:44:59 +0300 Subject: [PATCH] IDEA-131710 Unclear behavior of smart step into method after conditional operator - cleanup after review --- .../src/com/intellij/debugger/actions/SmartStepTarget.java | 1 + .../com/intellij/debugger/engine/BasicStepMethodFilter.java | 1 + .../src/com/intellij/debugger/engine/LambdaMethodFilter.java | 1 + .../impl/src/com/intellij/debugger/engine/MethodFilter.java | 3 ++- .../impl/src/com/intellij/debugger/engine/RequestHint.java | 5 +++-- 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java b/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java index a6579a94357c..4fd7a3ea9e96 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java @@ -50,6 +50,7 @@ public abstract class SmartStepTarget { return myNeedBreakpointRequest; } + @Nullable public Range getCallingExpressionLines() { return myExpressionLines; } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/BasicStepMethodFilter.java b/java/debugger/impl/src/com/intellij/debugger/engine/BasicStepMethodFilter.java index 50fafaf563cc..63a22bc1acbf 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/BasicStepMethodFilter.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/BasicStepMethodFilter.java @@ -75,6 +75,7 @@ public class BasicStepMethodFilter implements NamedMethodFilter { return false; } + @Nullable @Override public Range getCallingExpressionLines() { return myCallingExpressionLines; diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/LambdaMethodFilter.java b/java/debugger/impl/src/com/intellij/debugger/engine/LambdaMethodFilter.java index 043b103ee734..f85733082a90 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/LambdaMethodFilter.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/LambdaMethodFilter.java @@ -82,6 +82,7 @@ public class LambdaMethodFilter implements BreakpointStepMethodFilter{ return method.name().startsWith(LAMBDA_METHOD_PREFIX) && (!vm.canGetSyntheticAttribute() || method.isSynthetic()); } + @Nullable @Override public Range getCallingExpressionLines() { return myCallingExpressionLines; diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/MethodFilter.java b/java/debugger/impl/src/com/intellij/debugger/engine/MethodFilter.java index 18ece3d40f0f..bd49cbbbf7b7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/MethodFilter.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/MethodFilter.java @@ -18,8 +18,9 @@ package com.intellij.debugger.engine; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.util.Range; import com.sun.jdi.Location; +import org.jetbrains.annotations.Nullable; public interface MethodFilter { boolean locationMatches(DebugProcessImpl process, Location location) throws EvaluateException; - Range getCallingExpressionLines(); + @Nullable Range getCallingExpressionLines(); } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/RequestHint.java b/java/debugger/impl/src/com/intellij/debugger/engine/RequestHint.java index 8ab29740ba23..9be08b960e51 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/RequestHint.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/RequestHint.java @@ -35,6 +35,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiMethod; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.Range; import com.sun.jdi.Location; import com.sun.jdi.Method; import com.sun.jdi.VMDisconnectedException; @@ -142,8 +143,8 @@ public class RequestHint { return myPosition.getLine() == locationPosition.getLine(); } else { - return locationPosition.getLine() >= myMethodFilter.getCallingExpressionLines().getFrom() && - locationPosition.getLine() <= myMethodFilter.getCallingExpressionLines().getTo(); + Range exprLines = myMethodFilter.getCallingExpressionLines(); + return exprLines != null && locationPosition.getLine() >= exprLines.getFrom() && locationPosition.getLine() <= exprLines.getTo(); } }