allow to select a class by enter (but not space/dot) even if several same-named suggestions are present in the autopopup

This commit is contained in:
peter
2013-02-20 23:42:54 +01:00
parent 6e35695d09
commit d5573edaa2
4 changed files with 25 additions and 7 deletions
@@ -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<LookupElement> {
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;
}
@@ -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<LookupElement>() {
@@ -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 <caret>'
type 'Abcde '
myFixture.checkResult 'import foo.Abcdefg;\n\nclass Foo extends Abcdefg <caret>'
}
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 <caret>'
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 <caret>'''
}
public void testTwoNonImportedClasses_() {
myFixture.addClass("package foo; public class Abcdefg {}")
myFixture.addClass("package bar; public class Abcdefg {}")
myFixture.configureByText 'a.java', 'class Foo extends <caret>'
type 'Abcde'
assert lookup.items.size() == 1
type ' '
myFixture.checkResult 'class Foo extends Abcdefg <caret>'
}
@@ -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<LookupElement>() {
@Override