java completion: don't show classes with dollar in the name (IDEA-247596)

GitOrigin-RevId: d03af1f63b6b274deeb466f757d0db80feb4606b
This commit is contained in:
Peter Gromov
2020-08-07 11:42:07 +00:00
committed by intellij-monorepo-bot
parent 55ee09eada
commit 9edb4d5fb8
4 changed files with 24 additions and 1 deletions
@@ -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<PsiClass> {
@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();
@@ -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)) {
@@ -0,0 +1,5 @@
import imported.*;
class C {
WithD<caret>
}
@@ -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", """