add utility method for containing method
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Tue, 23 Jun 2015 16:16:13 +0000 (19:16 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Tue, 23 Jun 2015 16:33:25 +0000 (19:33 +0300)
java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java
java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java
java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointType.java
java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/LineBreakpoint.java

index bdf2bfce2bcba098037e6b05f9e3cab449bd370c..75665f4025de1b1f212cf3a6bc9a70f3b954808c 100644 (file)
@@ -217,7 +217,7 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
       if (!Comparing.equal(myExpectedClassName, JVMNameUtil.getClassVMName(aClass))) {
         return null;
       }
-      NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class);
+      PsiElement method = DebuggerUtilsEx.getContainingMethod(element);
       if (!StringUtil.isEmpty(myExpectedMethodName)) {
         if (method == null) {
           return null;
@@ -279,8 +279,7 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
     @Nullable
     @Override
     public TextRange getHighlightRange() {
-      PsiElement element = getElementAt();
-      NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class);
+      PsiElement method = DebuggerUtilsEx.getContainingMethod(this);
       if (method instanceof PsiLambdaExpression) {
         return method.getTextRange();
       }
index f139f137e1d14fa617c2bc20e88d798f3d169c1c..24dd4531f0cf33b9ef7643cf57251d2ca541b6ef 100644 (file)
@@ -820,7 +820,7 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
     };
     element.accept(lambdaCollector);
     // add initial lambda if we're inside already
-    NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class);
+    PsiElement method = getContainingMethod(element);
     if (method instanceof PsiLambdaExpression) {
       lambdas.add((PsiLambdaExpression)method);
     }
@@ -859,8 +859,7 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
   public static boolean inTheMethod(@NotNull SourcePosition pos, @NotNull PsiElement method) {
     PsiElement elem = pos.getElementAt();
     if (elem == null) return false;
-    NavigatablePsiElement elemMethod = PsiTreeUtil.getParentOfType(elem, PsiMethod.class, PsiLambdaExpression.class);
-    return Comparing.equal(elemMethod, method);
+    return Comparing.equal(getContainingMethod(elem), method);
   }
 
   public static boolean inTheSameMethod(@NotNull SourcePosition pos1, @NotNull SourcePosition pos2) {
@@ -869,17 +868,26 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
     PsiElement elem2 = pos2.getElementAt();
     if (elem1 == null) return elem2 == null;
     if (elem2 != null) {
-      NavigatablePsiElement expectedMethod = PsiTreeUtil.getParentOfType(elem1, PsiMethod.class, PsiLambdaExpression.class);
-      NavigatablePsiElement currentMethod = PsiTreeUtil.getParentOfType(elem2, PsiMethod.class, PsiLambdaExpression.class);
+      PsiElement expectedMethod = getContainingMethod(elem1);
+      PsiElement currentMethod = getContainingMethod(elem2);
       return Comparing.equal(expectedMethod, currentMethod);
     }
     return false;
   }
 
+  public static PsiElement getContainingMethod(@Nullable PsiElement elem) {
+    return PsiTreeUtil.getParentOfType(elem, PsiMethod.class, PsiLambdaExpression.class);
+  }
+
+  public static PsiElement getContainingMethod(@NotNull SourcePosition position) {
+    return getContainingMethod(position.getElementAt());
+  }
+
   public static final Comparator<Method> LAMBDA_ORDINAL_COMPARATOR = new Comparator<Method>() {
     @Override
     public int compare(Method m1, Method m2) {
       return LambdaMethodFilter.getLambdaOrdinal(m1.name()) - LambdaMethodFilter.getLambdaOrdinal(m2.name());
     }
   };
+
 }
index 29d6ff4aac046dcb0bb8af187b2b618d9384b6ab..8f8d0a74bc79769bf28fe5e19469445dc3bab225 100644 (file)
@@ -25,7 +25,6 @@ import com.intellij.openapi.util.TextRange;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.SmartList;
 import com.intellij.xdebugger.XDebuggerUtil;
 import com.intellij.xdebugger.XSourcePosition;
@@ -102,7 +101,7 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaLineB
       return Collections.emptyList();
     }
 
-    NavigatablePsiElement startMethod = PsiTreeUtil.getParentOfType(pos.getElementAt(), PsiMethod.class, PsiLambdaExpression.class);
+    PsiElement startMethod = DebuggerUtilsEx.getContainingMethod(pos);
     //noinspection SuspiciousMethodCalls
     if (lambdas.contains(startMethod) && lambdas.size() == 1) {
       return Collections.emptyList();
index 03b277e676d7520eea5d40b29ea40984bebea43e..1d4e2d9d9d1b2ff9fcabcca5e3c6df4ece459592 100644 (file)
@@ -236,7 +236,7 @@ public class LineBreakpoint extends BreakpointWithHighlighter {
         }
       }
     }
-    return PsiTreeUtil.getParentOfType(position.getElementAt(), PsiMethod.class, PsiLambdaExpression.class);
+    return DebuggerUtilsEx.getContainingMethod(position);
   }
 
   private boolean isInScopeOf(DebugProcessImpl debugProcess, String className) {