mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't consider groovy code in lib sources in findClass (IDEA-148368)
This commit is contained in:
+2
-2
@@ -40,14 +40,14 @@ public class GroovyClassFinder extends PsiElementFinder {
|
||||
@Override
|
||||
@Nullable
|
||||
public PsiClass findClass(@NotNull String qualifiedName, @NotNull GlobalSearchScope scope) {
|
||||
final List<PsiClass> classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
final List<PsiClass> 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<PsiClass> classes = myCache.getScriptClassesByFQName(qualifiedName, scope, true);
|
||||
final Collection<PsiClass> classes = myCache.getClassesByFQName(qualifiedName, scope, true);
|
||||
return classes.isEmpty() ? PsiClass.EMPTY_ARRAY : classes.toArray(new PsiClass[classes.size()]);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ public class GrStubFileElementType extends IStubFileElementType<GrFileStub> {
|
||||
|
||||
@Override
|
||||
public int getStubVersion() {
|
||||
return super.getStubVersion() + 24;
|
||||
return super.getStubVersion() + 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-1
@@ -106,7 +106,6 @@ public abstract class GrTypeDefinitionElementType<TypeDef extends GrTypeDefiniti
|
||||
final String fqn = stub.getQualifiedName();
|
||||
if (fqn != null) {
|
||||
sink.occurrence(GrFullClassNameIndex.KEY, fqn.hashCode());
|
||||
sink.occurrence(JavaStubIndexKeys.CLASS_FQN, fqn.hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-13
@@ -87,19 +87,8 @@ public class GroovyShortNamesCache extends PsiShortNamesCache {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<PsiClass> getClassesByFQName(@NotNull @NonNls String name, @NotNull GlobalSearchScope scope) {
|
||||
final List<PsiClass> 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<PsiClass> addClasses(String name, GlobalSearchScope scope, boolean inSource) {
|
||||
final List<PsiClass> result = new ArrayList<PsiClass>(getScriptClassesByFQName(name, scope, inSource));
|
||||
public List<PsiClass> getClassesByFQName(String name, GlobalSearchScope scope, boolean inSource) {
|
||||
final List<PsiClass> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<PsiClass> classes = GroovyShortNamesCache.getGroovyShortNamesCache(project).getClassesByFQName(qName, searchScope);
|
||||
List<PsiClass> 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();
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user