mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 21:11:28 +07:00
IDEA-79381 Exclude from Import not working for non-static inner classes in excluded packages
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
public class Main {
|
||||
Inner<caret>
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
public class Main {
|
||||
void f(foo.Outer outer) {
|
||||
outer.new In<caret>x
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
public class Main {
|
||||
void f(foo.Outer.In<caret>x outer) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user