From 9edb4d5fb8e0472d95031906058ecd81ec6f7897 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Fri, 7 Aug 2020 13:33:11 +0200 Subject: [PATCH] java completion: don't show classes with dollar in the name (IDEA-247596) GitOrigin-RevId: d03af1f63b6b274deeb466f757d0db80feb4606b --- .../LimitedAccessibleClassPreprocessor.java | 3 ++- .../completion/scope/JavaCompletionProcessor.java | 11 +++++++++++ .../completion/normal/NoClassesWithDollar.java | 5 +++++ .../completion/NormalCompletionTest.groovy | 6 ++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/NoClassesWithDollar.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/LimitedAccessibleClassPreprocessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/LimitedAccessibleClassPreprocessor.java index b95c63e4384b..2cbc204de8af 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/LimitedAccessibleClassPreprocessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/LimitedAccessibleClassPreprocessor.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInsight.completion; +import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.PsiClass; @@ -65,7 +66,7 @@ class LimitedAccessibleClassPreprocessor implements Processor { @Override public boolean process(PsiClass psiClass) { if (myParameters.getInvocationCount() < 2) { - if (PsiReferenceExpressionImpl.seemsScrambled(psiClass)) { + if (PsiReferenceExpressionImpl.seemsScrambled(psiClass) || JavaCompletionProcessor.seemsInternal(psiClass)) { return true; } String name = psiClass.getName(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java index 3d070a8a008a..b94ea37864db 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java @@ -26,6 +26,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.LinkedHashMap; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -107,6 +108,12 @@ public class JavaCompletionProcessor implements PsiScopeProcessor, ElementClassH Registry.is("ide.java.completion.suggest.static.after.instance"); } + @ApiStatus.Internal + public static boolean seemsInternal(PsiClass clazz) { + String name = clazz.getName(); + return name != null && name.contains("$"); + } + @Override public void handleEvent(@NotNull Event event, Object associated){ if (JavaScopeProcessorEvent.isEnteringStaticScope(event, associated)) { @@ -134,6 +141,10 @@ public class JavaCompletionProcessor implements PsiScopeProcessor, ElementClassH } } + if (element instanceof PsiClass && seemsInternal((PsiClass) element)) { + return true; + } + if (element instanceof PsiMethod) { PsiMethod method = (PsiMethod)element; if (PsiTypesUtil.isGetClass(method) && PsiUtil.isLanguageLevel5OrHigher(myElement)) { diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoClassesWithDollar.java b/java/java-tests/testData/codeInsight/completion/normal/NoClassesWithDollar.java new file mode 100644 index 000000000000..63e2b3a16fd7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/NoClassesWithDollar.java @@ -0,0 +1,5 @@ +import imported.*; + +class C { + WithD +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy index 88a866797348..ba712ea4eb41 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy @@ -1728,6 +1728,12 @@ class Foo extends myClass ''' } + void testNoClassesWithDollar() { + myFixture.addClass('package some; public class $WithDollarNonImported {}') + myFixture.addClass('package imported; public class $WithDollarImported {}') + doAntiTest() + } + @NeedsIndex.ForStandardLibrary void "test don't show static inner class after instance qualifier"() { myFixture.configureByText "a.java", """