From c67a99223072cfe2addc5773a0ae575f9a9271fa Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Mon, 9 Feb 2015 18:55:34 +0300 Subject: [PATCH] IDEA-133881 Debugger will not stop on a breakpoint in a method of an inner class of an anonymous - fixes after review --- .../intellij/debugger/engine/JVMNameUtil.java | 25 ++++++++++--------- .../debugger/engine/PositionManagerImpl.java | 17 +++++-------- 2 files changed, 19 insertions(+), 23 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 16f0647ecec1..04694c844592 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -249,13 +249,13 @@ public class JVMNameUtil { } public static JVMName getJVMQualifiedName(PsiClass psiClass) { - if (!PsiUtil.isLocalOrAnonymousClass(psiClass)) { - final String name = getNonAnonymousClassName(psiClass); - if (name != null) { - return getJVMRawText(name); - } + final String name = getNonAnonymousClassName(psiClass); + if (name != null) { + return getJVMRawText(name); + } + else { + return new JVMClassAt(SourcePosition.createFromElement(psiClass)); } - return new JVMClassAt(SourcePosition.createFromElement(psiClass)); } @Nullable @@ -264,17 +264,18 @@ public class JVMNameUtil { if (psiClass == null) { return null; } - if (!PsiUtil.isLocalOrAnonymousClass(psiClass)) { - final String name = getNonAnonymousClassName(psiClass); - if (name != null) { - return getJVMRawText(name); - } + final String name = getNonAnonymousClassName(psiClass); + if (name != null) { + return getJVMRawText(name); } return new JVMClassAt(pos); } @Nullable public static String getNonAnonymousClassName(PsiClass aClass) { + if (PsiUtil.isLocalOrAnonymousClass(aClass)) { + return null; + } String name = aClass.getName(); if (name == null) { return null; 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 1c3fef202b77..e6122f0a38b0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -84,7 +84,8 @@ public class PositionManagerImpl implements PositionManager { return; } - if (!classHasName(psiClass)) { + String className = JVMNameUtil.getNonAnonymousClassName(psiClass); + if (className == null) { final PsiClass parent = JVMNameUtil.getTopLevelParentClass(psiClass); if (parent == null) { @@ -107,7 +108,7 @@ public class PositionManagerImpl implements PositionManager { }); } else { - waitPrepareFor.set(JVMNameUtil.getNonAnonymousClassName(psiClass)); + waitPrepareFor.set(className); waitRequestor.set(requestor); } } @@ -118,10 +119,6 @@ public class PositionManagerImpl implements PositionManager { return myDebugProcess.getRequestsManager().createClassPrepareRequest(waitRequestor.get(), waitPrepareFor.get()); } - private static boolean classHasName(PsiClass psiClass) { - return !PsiUtil.isLocalOrAnonymousClass(psiClass) && JVMNameUtil.getNonAnonymousClassName(psiClass) != null; - } - public SourcePosition getSourcePosition(final Location location) throws NoDataException { DebuggerManagerThreadImpl.assertIsManagerThread(); if(location == null) { @@ -244,7 +241,8 @@ public class PositionManagerImpl implements PositionManager { final PsiClass psiClass = JVMNameUtil.getClassAt(position); if (psiClass != null) { classAtPositionRef.set(psiClass); - if (!classHasName(psiClass)) { + String className = JVMNameUtil.getNonAnonymousClassName(psiClass); + if (className == null) { isLocalOrAnonymous.set(Boolean.TRUE); final PsiClass topLevelClass = JVMNameUtil.getTopLevelParentClass(psiClass); if (topLevelClass != null) { @@ -259,10 +257,7 @@ public class PositionManagerImpl implements PositionManager { } } else { - final String className = JVMNameUtil.getNonAnonymousClassName(psiClass); - if (className != null) { - baseClassNameRef.set(className); - } + baseClassNameRef.set(className); } } }