diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/javaView/GroovyClassFinder.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/javaView/GroovyClassFinder.java index 9b1634732632..44ad69c8bc92 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/javaView/GroovyClassFinder.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/javaView/GroovyClassFinder.java @@ -40,14 +40,14 @@ public class GroovyClassFinder extends PsiElementFinder { @Override @Nullable public PsiClass findClass(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) { - final List classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true); + final List classes = myCache.getClassesByFQName(qualifiedName, scope, true); return classes.isEmpty() ? null : classes.get(0); } @Override @NotNull public PsiClass[] findClasses(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) { - final Collection classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true); + final Collection classes = myCache.getClassesByFQName(qualifiedName, scope, true); return classes.isEmpty() ? PsiClass.EMPTY_ARRAY : classes.toArray(new PsiClass[classes.size()]); } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java index f9222e02ba7b..0cce81e52a51 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java @@ -62,7 +62,7 @@ public class GrStubFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return super.getStubVersion() + 24; + return super.getStubVersion() + 25; } @Override diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java index e851fb39c140..1944c47c8f1e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java @@ -106,7 +106,6 @@ public abstract class GrTypeDefinitionElementType getClassesByFQName(@NotNull @NonNls String name, @NotNull GlobalSearchScope scope) { - final List result = addClasses(name, scope, true); - if (result.isEmpty()) { - result.addAll(addClasses(name, scope, false)); - } - if (result.isEmpty()) { - result.addAll(addClasses(name, GlobalSearchScope.projectScope(myProject), false)); - } - return result; - } - - private List addClasses(String name, GlobalSearchScope scope, boolean inSource) { - final List result = new ArrayList(getScriptClassesByFQName(name, scope, inSource)); + public List getClassesByFQName(String name, GlobalSearchScope scope, boolean inSource) { + final List result = ContainerUtil.newArrayList(); for (PsiElement psiClass : StubIndex.getElements(GrFullClassNameIndex.KEY, name.hashCode(), myProject, inSource ? new GrSourceFilterScope(scope) : scope, PsiClass.class)) { @@ -108,6 +97,7 @@ public class GroovyShortNamesCache extends PsiShortNamesCache { result.add((PsiClass)psiClass); } } + result.addAll(getScriptClassesByFQName(name, scope, inSource)); return result; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index f86495fa97d3..d3759333bc4c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -251,8 +251,15 @@ public class GroovyPositionManager implements PositionManager { String qName = getOriginalQualifiedName(refType, runtimeName); GlobalSearchScope searchScope = addModuleContent(myDebugProcess.getSearchScope()); + GroovyShortNamesCache cache = GroovyShortNamesCache.getGroovyShortNamesCache(project); try { - final List classes = GroovyShortNamesCache.getGroovyShortNamesCache(project).getClassesByFQName(qName, searchScope); + List classes = cache.getClassesByFQName(qName, searchScope, true); + if (classes.isEmpty()) { + classes = cache.getClassesByFQName(qName, searchScope, false); + } + if (classes.isEmpty()) { + classes = cache.getClassesByFQName(qName, GlobalSearchScope.projectScope(project), false); + } PsiClass clazz = classes.size() == 1 ? classes.get(0) : null; if (clazz != null) return clazz.getContainingFile(); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy index 095badc495ab..a48ce563e920 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy @@ -44,8 +44,10 @@ import com.intellij.openapi.util.Computable import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiFile import com.intellij.psi.impl.DebugUtil +import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.PsiTestUtil import com.intellij.testFramework.TestLoggerFactory import com.intellij.testFramework.builders.JavaModuleFixtureBuilder @@ -319,6 +321,32 @@ cl.parseClass('''$mcText''', 'MyClass.groovy').foo(2) } } + public void "test groovy source named java in lib source"() { + def tempDir = new TempDirTestFixtureImpl() + edt { + tempDir.setUp() + disposeOnTearDown({ tempDir.tearDown() } as Disposable) + tempDir.createFile("pkg/java.groovy", "class java {}") + PsiTestUtil.addLibrary(myModule, 'lib', tempDir.getFile('').path, [] as String[], [''] as String[]) + } + + def facade = JavaPsiFacade.getInstance(project) + assert !facade.findClass('java', GlobalSearchScope.allScope(project)) + assert !facade.findPackage('').findClassByShortName('java', GlobalSearchScope.allScope(project)) + + def file = myFixture.addFileToProject("Foo.groovy", """\ +int a = 42 +int b = 3 //1 + """) + + addBreakpoint(file.virtualFile, 1) + + runDebugger file, { + waitForBreakpoint() + eval 'a', '42' + } + } + private SourcePosition getSourcePosition() { managed { EvaluationContextImpl context = evaluationContext()