diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 647dd2306759..24b1b4a897ae 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -285,6 +285,9 @@ public class JavaCompletionUtil { final boolean pkgContext = inSomePackage(element); + PsiClass qualifierClass = PsiUtil.resolveClassInClassTypeOnly(qualifierType); + final boolean honorExcludes = qualifierClass == null || !isInExcludedPackage(qualifierClass, false); + final Set mentioned = new THashSet(); for (CompletionElement completionElement : processor.getResults()) { for (LookupElement item : createLookupElements(completionElement, javaReference)) { @@ -294,7 +297,7 @@ public class JavaCompletionUtil { continue; } if (o instanceof PsiMember) { - if (isInExcludedPackage((PsiMember)o, true)) { + if (honorExcludes && isInExcludedPackage((PsiMember)o, true)) { continue; } mentioned.add(CompletionUtil.getOriginalOrSelf((PsiMember)o)); diff --git a/java/java-tests/testData/codeInsight/completion/normal/StaticMethodOfExcludedClass.java b/java/java-tests/testData/codeInsight/completion/normal/StaticMethodOfExcludedClass.java new file mode 100644 index 000000000000..f218f541e5eb --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/StaticMethodOfExcludedClass.java @@ -0,0 +1,6 @@ +public class Main { + void f() { + foo.Outer.mx + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index d1e5b2c3f656..2d0de8caa752 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -441,6 +441,13 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { assert myFixture.lookupElementStrings == ['Inner'] } + public void testStaticMethodOfExcludedClass() { + JavaProjectCodeInsightSettings.setExcludedNames(project, testRootDisposable, "foo") + myFixture.addClass 'package foo; public class Outer { public static void method() {} }' + configure() + assert myFixture.lookupElementStrings == ['method'] + } + public void testAtUnderClass() throws Throwable { doTest('\n'); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMainCompletionProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMainCompletionProvider.java index 232eaa23c7fb..890cc25fedcd 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMainCompletionProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GrMainCompletionProvider.java @@ -229,6 +229,9 @@ public class GrMainCompletionProvider extends CompletionProvider zeroPriority = ContainerUtil.newArrayList(); + PsiClass qualifierClass = com.intellij.psi.util.PsiUtil.resolveClassInClassTypeOnly(qualifierType); + final boolean honorExcludes = qualifierClass == null || !JavaCompletionUtil.isInExcludedPackage(qualifierClass, false); + GroovyCompletionUtil.processVariants(reference, matcher, parameters, new Consumer() { @Override public void consume(LookupElement lookupElement) { @@ -245,7 +248,7 @@ public class GrMainCompletionProvider extends CompletionProviderf') } + public void testStaticMethodOnExcludedClass() { + JavaProjectCodeInsightSettings.setExcludedNames(project, testRootDisposable, String.name) + assert doContainsTest('valueOf', 'String.valf') + } + private doContainsTest(String itemToCheck, String text) { myFixture.configureByText "a.groovy", text