From 5db2fe24fc93ea6e5bd479b43bb45cca19ced871 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 25 May 2012 15:17:22 +0200 Subject: [PATCH] IDEA-86631 Debugger doesn't work in a class which name contains dollar sign ($) --- .../debugger/engine/DebuggerUtils.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java index 382bcff89b41..96d684a289d3 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java +++ b/java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java @@ -334,19 +334,36 @@ public abstract class DebuggerUtils { return getSuperType(subType, superType) != null; } - public static PsiClass findClass(String className, Project project, final GlobalSearchScope scope) { + @Nullable + public static PsiClass findClass(final String className, Project project, final GlobalSearchScope scope) { ApplicationManager.getApplication().assertReadAccessAllowed(); final PsiManager psiManager = PsiManager.getInstance(project); + final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(psiManager.getProject()); if (getArrayClass(className) != null) { - return JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory().getArrayClass(LanguageLevelProjectExtension.getInstance(psiManager.getProject()).getLanguageLevel()); + return javaPsiFacade.getElementFactory().getArrayClass(LanguageLevelProjectExtension.getInstance(psiManager.getProject()).getLanguageLevel()); } if(project.isDefault()) { return null; } final String _className = className.replace('$', '.'); - final PsiClass aClass = JavaPsiFacade.getInstance(psiManager.getProject()).findClass(_className, scope); - if (aClass == null && scope != GlobalSearchScope.allScope(project)) { - return JavaPsiFacade.getInstance(psiManager.getProject()).findClass(_className, GlobalSearchScope.allScope(project)); + PsiClass aClass = javaPsiFacade.findClass(_className, scope); + if (aClass == null) { + if (!_className.equals(className)) { + // try original name if it differs from the normalized name + aClass = javaPsiFacade.findClass(className, scope); + } + } + if (aClass == null) { + final GlobalSearchScope globalScope = GlobalSearchScope.allScope(project); + if (!globalScope.equals(scope)) { + aClass = javaPsiFacade.findClass(_className, globalScope); + if (aClass == null) { + if (!_className.equals(className)) { + // try original name with global scope if the original differs from the normalized name + aClass = javaPsiFacade.findClass(className, globalScope); + } + } + } } return aClass; }