From 4bd81f0d56b2a798d2e4f79eae8e9befd7f31ffb Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 23 Jul 2015 16:12:42 +0300 Subject: [PATCH] fixed breakpoints in lambdas inside local classes --- .../com/intellij/debugger/engine/JVMNameUtil.java | 12 +++++++++--- .../debugger/engine/PositionManagerImpl.java | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java index 85d181a4b20b..6d7192e8c63f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java @@ -476,10 +476,16 @@ public class JVMNameUtil { @Nullable public static String getClassVMName(@Nullable PsiClass containingClass) { - if (containingClass == null) return null; + // no support for local classes for now + if (containingClass == null || PsiUtil.isLocalClass(containingClass)) return null; if (containingClass instanceof PsiAnonymousClass) { - return getClassVMName(PsiTreeUtil.getParentOfType(containingClass, PsiClass.class)) + - JavaAnonymousClassesHelper.getName((PsiAnonymousClass)containingClass); + String parentName = getClassVMName(PsiTreeUtil.getParentOfType(containingClass, PsiClass.class)); + if (parentName == null) { + return null; + } + else { + return parentName + JavaAnonymousClassesHelper.getName((PsiAnonymousClass)containingClass); + } } return ClassUtil.getJVMClassName(containingClass); } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 6ec3eefddb17..e72a8cea5884 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -213,8 +213,8 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio } private PsiElement remapElement(PsiElement element) { - PsiClass aClass = getEnclosingClass(element); - if (!Comparing.equal(myExpectedClassName, JVMNameUtil.getClassVMName(aClass))) { + String name = JVMNameUtil.getClassVMName(getEnclosingClass(element)); + if (name != null && !name.equals(myExpectedClassName)) { return null; } PsiElement method = DebuggerUtilsEx.getContainingMethod(element);