mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
explicit imports should have priority over implicit groovy.util (IDEA-71943)
This commit is contained in:
@@ -147,15 +147,17 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
return isImplicitlyImported(element, expectedName) || super.execute(element, state);
|
||||
}
|
||||
};
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
GrImportStatement[] importStatements = getImportStatements();
|
||||
if (!processImports(state, lastParent, place, importProcessor, importStatements, false)) return false;
|
||||
if (!processDeclarationsInPackage(processor, state, lastParent, place, facade, getPackageName())) return false;
|
||||
if (!processImports(state, lastParent, place, importProcessor, importStatements, true)) return false;
|
||||
|
||||
if (processClasses && !processImplicitImports(processor, state, lastParent, place)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (classHint == null || classHint.shouldProcess(ClassHint.ResolveKind.PACKAGE)) {
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
if (expectedName != null) {
|
||||
final PsiPackage pkg = facade.findPackage(expectedName);
|
||||
if (pkg != null && !processor.execute(pkg, state)) {
|
||||
@@ -172,8 +174,6 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
}
|
||||
}
|
||||
|
||||
if (!processImports(state, lastParent, place, importProcessor, importStatements, true)) return false;
|
||||
|
||||
if (lastParent != null && !(lastParent instanceof GrTypeDefinition) && scriptClass != null) {
|
||||
if (!ResolveUtil.processElement(processor, getSyntheticArgsParameter(), state)) return false;
|
||||
}
|
||||
@@ -240,16 +240,7 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
|
||||
for (final String implicitlyImported : getImplicitlyImportedPackages()) {
|
||||
PsiPackage aPackage = facade.findPackage(implicitlyImported);
|
||||
if (aPackage != null && !aPackage.processDeclarations(new DelegatingScopeProcessor(processor) {
|
||||
@Override
|
||||
public boolean execute(PsiElement element, ResolveState state) {
|
||||
if (element instanceof PsiPackage) return true;
|
||||
return super.execute(element, state);
|
||||
}
|
||||
}, state, lastParent, place)) {
|
||||
return false;
|
||||
}
|
||||
if (!processDeclarationsInPackage(processor, state, lastParent, place, facade, implicitlyImported)) return false;
|
||||
}
|
||||
|
||||
for (String implicitlyImportedClass : IMPLICITLY_IMPORTED_CLASSES) {
|
||||
@@ -259,6 +250,23 @@ public class GroovyFileImpl extends GroovyFileBaseImpl implements GroovyFile {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean processDeclarationsInPackage(final PsiScopeProcessor processor,
|
||||
ResolveState state,
|
||||
PsiElement lastParent,
|
||||
PsiElement place, JavaPsiFacade facade, String implicitlyImported) {
|
||||
PsiPackage aPackage = facade.findPackage(implicitlyImported);
|
||||
if (aPackage != null && !aPackage.processDeclarations(new DelegatingScopeProcessor(processor) {
|
||||
@Override
|
||||
public boolean execute(PsiElement element, ResolveState state) {
|
||||
if (element instanceof PsiPackage) return true;
|
||||
return super.execute(element, state);
|
||||
}
|
||||
}, state, lastParent, place)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean processChildrenScopes(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place) {
|
||||
final StubElement<?> stub = getStub();
|
||||
if (stub != null) {
|
||||
|
||||
@@ -234,6 +234,11 @@ public class Test extends MyMap {
|
||||
assertEquals "C2", ((PsiClass) resolve("A.groovy")).name
|
||||
}
|
||||
|
||||
void testPreferImportsToImplicit() {
|
||||
myFixture.addFileToProject "a/C1.groovy", "package a; class Factory{}"
|
||||
assertEquals "a.Factory", ((PsiClass) resolve("A.groovy")).qualifiedName
|
||||
}
|
||||
|
||||
void testPreferClassFromCurPackage() {
|
||||
myFixture.addFileToProject "a/Cl.groovy", "package a; class Cl{}"
|
||||
myFixture.addFileToProject "b/Cl.groovy", "package b; class Cl{}"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
import a.*
|
||||
|
||||
F<ref>actory f
|
||||
Reference in New Issue
Block a user