From fb06a91c78db0fdccc9651a73ed7e773cf85850f Mon Sep 17 00:00:00 2001 From: niktrop Date: Wed, 22 Jan 2014 11:15:01 +0400 Subject: [PATCH 1/3] Filter out non-physical classes in DefaultClassNavigationContributor --- .../ide/util/gotoByName/DefaultClassNavigationContributor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java index 23aa77adfc63..b0cbc06d048e 100644 --- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java +++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultClassNavigationContributor.java @@ -90,7 +90,7 @@ public class DefaultClassNavigationContributor implements ChooseByNameContributo final boolean isAnnotation = parameters.getLocalPatternName().startsWith("@"); @Override public boolean process(PsiClass aClass) { - if (aClass.getContainingFile().getVirtualFile() == null) return true; + if (aClass.getContainingFile().getVirtualFile() == null || !aClass.isPhysical()) return true; if (isAnnotation && !aClass.isAnnotationType()) return true; return processor.process(aClass); } From ab8284b414bdfc4350abdb159968f5580db093fa Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 6 Feb 2014 14:47:34 +0100 Subject: [PATCH 2/3] actually cache GrModifierListImpl.getAnnotations --- .../psi/impl/auxiliary/modifiers/GrModifierListImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java index 6f8c4982422b..9415e888f79f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java @@ -31,7 +31,6 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; -import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; @@ -52,7 +51,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.packaging.GrPackageDef import org.jetbrains.plugins.groovy.lang.psi.impl.GrStubElementBase; import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrModifierListStub; -import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import java.util.ArrayList; import java.util.Map; @@ -362,13 +360,13 @@ public class GrModifierListImpl extends GrStubElementBase im @NotNull public GrAnnotation[] getAnnotations() { - return CachedValuesManager.getManager(getProject()).createCachedValue(new CachedValueProvider() { + return CachedValuesManager.getCachedValue(this, new CachedValueProvider() { @Nullable @Override public Result compute() { return Result.create(GrAnnotationCollector.getResolvedAnnotations(GrModifierListImpl.this), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT); } - }).getValue(); + }); } @NotNull From 3fd5b8e306802e9201bb6d6d9eeb7fa4bb8bb854 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 6 Feb 2014 16:13:09 +0100 Subject: [PATCH 3/3] don't suggest lowercase non-imported classes in autopopup (IDEA-114348) --- .../codeInsight/completion/AllClassesGetter.java | 11 +++++++++-- .../completion/normal/NoLowercaseClasses.java | 6 ++++++ .../completion/NormalCompletionTest.groovy | 10 ++++++++-- .../src/misc/registry.properties | 4 ++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/NoLowercaseClasses.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java index 81cb9b5e1185..a5431b56082a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java @@ -23,6 +23,8 @@ import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl; @@ -156,8 +158,13 @@ public class AllClassesGetter { @Override public boolean process(PsiClass psiClass) { - if (parameters.getInvocationCount() < 2 && PsiReferenceExpressionImpl.seemsScrambled(psiClass)) { - return true; + if (parameters.getInvocationCount() < 2) { + if (PsiReferenceExpressionImpl.seemsScrambled(psiClass)) { + return true; + } + if (!StringUtil.isCapitalized(psiClass.getName()) && !Registry.is("ide.completion.show.lower.case.classes")) { + return true; + } } assert psiClass != null; diff --git a/java/java-tests/testData/codeInsight/completion/normal/NoLowercaseClasses.java b/java/java-tests/testData/codeInsight/completion/normal/NoLowercaseClasses.java new file mode 100644 index 000000000000..fba3e383c4d6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/NoLowercaseClasses.java @@ -0,0 +1,6 @@ +public class Zoo { + void foo() { + abcdefgx + } + +} 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 999fddaa2eee..a511209092e9 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1370,8 +1370,7 @@ class Foo {{ myFixture.configureByText "a.java", """ class Foo extends my """ - myFixture.completeBasic() - myFixture.type('\n') + myFixture.complete(CompletionType.BASIC, 2) myFixture.checkResult '''import foo.myClass; class Foo extends myClass @@ -1405,4 +1404,11 @@ class Bar { public void testNoMathTargetMethods() { doAntiTest() } + public void testNoLowercaseClasses() { + myFixture.addClass("package foo; public class abcdefgXxx {}") + doAntiTest() + myFixture.complete(CompletionType.BASIC, 2) + assertStringItems('abcdefgXxx') + } + } diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 838b74fd8136..ab2bcb8352a3 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -232,6 +232,10 @@ ide.completion.show.better.matching.classes=true # suppress inspection "UnusedProperty" ide.completion.show.better.matching.classes.description=Show non-imported but good matching classes in basic completion +ide.completion.show.lower.case.classes=false +# suppress inspection "UnusedProperty" +ide.completion.show.lower.case.classes.description=Show non-imported classes starting with a lowercase letter in basic completion + ide.completion.delay.autopopup.until.completed=false # suppress inspection "UnusedProperty" ide.completion.delay.autopopup.until.completed.description=Controls if completion autopopup is shown immediately and populated in background, or delayed until all suggestion are calculated