explicit imports should have priority over implicit groovy.util (IDEA-71943)

This commit is contained in:
peter
2011-07-12 19:34:13 +02:00
parent 143b888811
commit a51296b783
3 changed files with 29 additions and 13 deletions
@@ -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