From d5573edaa21795d01052fd847b62fb4b197c8515 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 20 Feb 2013 22:20:57 +0100 Subject: [PATCH] allow to select a class by enter (but not space/dot) even if several same-named suggestions are present in the autopopup --- .../completion/ClassByNameMerger.java | 5 ++-- .../completion/JavaNoVariantsDelegator.java | 2 +- .../completion/JavaAutoPopupTest.groovy | 23 ++++++++++++++++--- .../completion/GroovyNoVariantsDelegator.java | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ClassByNameMerger.java b/java/java-impl/src/com/intellij/codeInsight/completion/ClassByNameMerger.java index c17677ef3476..5496bb1afd5e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ClassByNameMerger.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ClassByNameMerger.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInsight.completion; +import com.intellij.codeInsight.CodeInsightSettings; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.util.Consumer; @@ -28,8 +29,8 @@ public class ClassByNameMerger implements Consumer { private final boolean myShouldMerge; private final CompletionResultSet myResult; - public ClassByNameMerger(boolean shouldMerge, CompletionResultSet result) { - myShouldMerge = shouldMerge; + public ClassByNameMerger(CompletionParameters parameters, CompletionResultSet result) { + myShouldMerge = parameters.getInvocationCount() == 0 && CodeInsightSettings.getInstance().SELECT_AUTOPOPUP_SUGGESTIONS_BY_CHARS; myResult = result; } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java index 8e604a247d33..d860c328b4af 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -154,7 +154,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor { } private static void suggestNonImportedClasses(CompletionParameters parameters, CompletionResultSet result) { - final ClassByNameMerger merger = new ClassByNameMerger(parameters.getInvocationCount() == 0, result); + final ClassByNameMerger merger = new ClassByNameMerger(parameters, result); JavaClassNameCompletionContributor.addAllClasses(parameters, true, result.getPrefixMatcher(), new Consumer() { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 3ea84600cc2b..79524d773600 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -1119,18 +1119,35 @@ class Foo {{ assert end == myFixture.editor.caretModel.logicalPosition } - public void testNonImportedClass() { + public void "test two non-imported classes when space selects first autopopup item"() { myFixture.addClass("package foo; public class Abcdefg {}") myFixture.configureByText 'a.java', 'class Foo extends ' type 'Abcde ' myFixture.checkResult 'import foo.Abcdefg;\n\nclass Foo extends Abcdefg ' } - public void testTwoNonImportedClasses() { + public void "test two non-imported classes when space does not select first autopopup item"() { + CodeInsightSettings.instance.SELECT_AUTOPOPUP_SUGGESTIONS_BY_CHARS = false + myFixture.addClass("package foo; public class Abcdefg {}") myFixture.addClass("package bar; public class Abcdefg {}") myFixture.configureByText 'a.java', 'class Foo extends ' - type 'Abcde ' + type 'Abcde' + assert lookup.items.size() == 2 + edt { myFixture.performEditorAction(IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN) } + type ' ' + myFixture.checkResult '''import bar.Abcdefg; + +class Foo extends Abcdefg ''' + } + + public void testTwoNonImportedClasses_() { + myFixture.addClass("package foo; public class Abcdefg {}") + myFixture.addClass("package bar; public class Abcdefg {}") + myFixture.configureByText 'a.java', 'class Foo extends ' + type 'Abcde' + assert lookup.items.size() == 1 + type ' ' myFixture.checkResult 'class Foo extends Abcdefg ' } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java index 0c485f1bfa63..102b2f01f9ae 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java @@ -74,7 +74,7 @@ public class GroovyNoVariantsDelegator extends CompletionContributor { } private static void suggestNonImportedClasses(CompletionParameters parameters, CompletionResultSet result) { - final ClassByNameMerger merger = new ClassByNameMerger(parameters.getInvocationCount() == 0, result); + final ClassByNameMerger merger = new ClassByNameMerger(parameters, result); GroovyCompletionContributor.addAllClasses(parameters, new Consumer() { @Override