IDEA-79381 Exclude from Import not working for non-static inner classes in excluded packages

This commit is contained in:
peter
2011-12-29 17:45:52 +01:00
parent a2b643978a
commit 4ba1cc4d29
12 changed files with 69 additions and 11 deletions

View File

@@ -314,7 +314,7 @@ public class CodeInsightUtil {
return true;
}
if (JavaCompletionUtil.isInExcludedPackage(inheritor)) return true;
if (JavaCompletionUtil.isInExcludedPackage(inheritor, false)) return true;
PsiSubstitutor superSubstitutor = TypeConversionUtil.getClassSubstitutor(baseClass, inheritor, PsiSubstitutor.EMPTY);
if (superSubstitutor == null) return true;

View File

@@ -188,7 +188,7 @@ public class AllClassesGetter {
if (!context.isValid() || !psiClass.isValid()) return false;
if (JavaCompletionUtil.isInExcludedPackage(psiClass)) return false;
if (JavaCompletionUtil.isInExcludedPackage(psiClass, false)) return false;
final String qualifiedName = psiClass.getQualifiedName();
if (qualifiedName == null || !qualifiedName.startsWith(packagePrefix)) return false;

View File

@@ -45,7 +45,6 @@ import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
import com.intellij.psi.filters.element.ExcludeSillyAssignment;
import com.intellij.psi.html.HtmlTag;
import com.intellij.psi.impl.source.PsiImmediateClassType;
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.psi.javadoc.PsiDocToken;
import com.intellij.psi.scope.BaseScopeProcessor;
import com.intellij.psi.scope.ElementClassFilter;
@@ -170,12 +169,15 @@ public class JavaCompletionUtil {
return type;
}
public static boolean isInExcludedPackage(@NotNull final PsiMember member) {
public static boolean isInExcludedPackage(@NotNull final PsiMember member, boolean allowInstanceInnerClasses) {
final String name = StaticImportMethodFix.getMemberQualifiedName(member);
if (name == null) return false;
if (!member.hasModifierProperty(PsiModifier.STATIC)) {
if (member instanceof PsiMethod || member instanceof PsiField || member instanceof PsiClass && member.getContainingClass() != null) {
if (member instanceof PsiMethod || member instanceof PsiField) {
return false;
}
if (allowInstanceInnerClasses && member instanceof PsiClass && member.getContainingClass() != null) {
return false;
}
}
@@ -447,7 +449,7 @@ public class JavaCompletionUtil {
continue;
}
if (o instanceof PsiMember) {
if (isInExcludedPackage((PsiMember)o)) {
if (isInExcludedPackage((PsiMember)o, true)) {
continue;
}
mentioned.add((PsiMember)o);

View File

@@ -97,7 +97,7 @@ public abstract class ImportClassFixBase<T extends PsiElement & PsiReference> im
boolean isAnnotationReference = myRef.getParent() instanceof PsiAnnotation;
for (PsiClass aClass : classes) {
if (isAnnotationReference && !aClass.isAnnotationType()) continue;
if (JavaCompletionUtil.isInExcludedPackage(aClass)) continue;
if (JavaCompletionUtil.isInExcludedPackage(aClass, false)) continue;
if (referenceHasTypeParameters && !aClass.hasTypeParameters()) continue;
String qName = aClass.getQualifiedName();
if (qName != null) { //filter local classes

View File

@@ -108,7 +108,7 @@ public class StaticImportMethodFix implements IntentionAction {
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(element.getProject()).getResolveHelper();
for (PsiMethod method : methods) {
ProgressManager.checkCanceled();
if (JavaCompletionUtil.isInExcludedPackage(method)) continue;
if (JavaCompletionUtil.isInExcludedPackage(method, false)) continue;
if (!method.hasModifierProperty(PsiModifier.STATIC)) continue;
PsiFile file = method.getContainingFile();
if (file instanceof PsiJavaFile

View File

@@ -117,7 +117,7 @@ public abstract class MembersGetter {
for (final PsiElement result : processor.getResults()) {
if (result instanceof PsiMember && !(result instanceof PsiClass)) {
final PsiMember member = (PsiMember)result;
if (JavaCompletionUtil.isInExcludedPackage(member) || importedStatically.contains(member)) continue;
if (JavaCompletionUtil.isInExcludedPackage(member, false) || importedStatically.contains(member)) continue;
if (member.hasModifierProperty(PsiModifier.STATIC) && resolveHelper.isAccessible(member, context, null)) {
if (result instanceof PsiField && !member.hasModifierProperty(PsiModifier.FINAL)) continue;
if (result instanceof PsiMethod && acceptMethods) continue;

View File

@@ -0,0 +1,3 @@
public class Main {
Inner<caret>
}

View File

@@ -0,0 +1,6 @@
public class Main {
void f(foo.Outer outer) {
outer.new In<caret>x
}
}

View File

@@ -0,0 +1,5 @@
public class Main {
void f(foo.Outer.In<caret>x outer) {
}
}

View File

@@ -418,6 +418,48 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
}
}
public void testExcludeInstanceInnerClasses() throws Throwable {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
myFixture.addClass 'package bar; public class Inner {}'
try {
configure()
assert 'bar.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
assert myFixture.lookupElementStrings == ['Inner']
}
finally {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
}
}
public void testExcludedInstanceInnerClassCreation() throws Throwable {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
myFixture.addClass 'package bar; public class Inner {}'
try {
configure()
assert 'foo.Outer.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
assert myFixture.lookupElementStrings == ['Inner']
}
finally {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
}
}
public void testExcludedInstanceInnerClassQualifiedReference() throws Throwable {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ['foo']
myFixture.addClass 'package foo; public class Outer { public class Inner {} }'
myFixture.addClass 'package bar; public class Inner {}'
try {
configure()
assert 'foo.Outer.Inner' == ((JavaPsiClassReferenceElement)myFixture.lookupElements[0]).qualifiedName
assert myFixture.lookupElementStrings == ['Inner']
}
finally {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[0]
}
}
public void testAtUnderClass() throws Throwable {
doTest();
}

View File

@@ -113,7 +113,7 @@ public class GroovyStaticImportMethodFix implements IntentionAction {
List<PsiMethod> applicableList = new ArrayList<PsiMethod>();
for (PsiMethod method : methods) {
ProgressManager.checkCanceled();
if (JavaCompletionUtil.isInExcludedPackage(method)) continue;
if (JavaCompletionUtil.isInExcludedPackage(method, false)) continue;
if (!method.hasModifierProperty(PsiModifier.STATIC)) continue;
PsiFile file = method.getContainingFile();
if (file instanceof PsiClassOwner

View File

@@ -457,7 +457,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
object = ((GroovyResolveResult)object).getElement();
}
if (object instanceof PsiMember && JavaCompletionUtil.isInExcludedPackage((PsiMember)object)) {
if (object instanceof PsiMember && JavaCompletionUtil.isInExcludedPackage((PsiMember)object, true)) {
return;
}