[ and < to finish completion in groovy (IDEA-40461)

This commit is contained in:
peter
2011-03-08 19:48:58 +01:00
parent ae03a1e758
commit 925cc2fba6
3 changed files with 51 additions and 14 deletions
@@ -41,22 +41,24 @@ public class JavaCharFilter extends CharFilter {
public Result acceptChar(char c, final int prefixLength, final Lookup lookup) {
if (!lookup.isCompletion()) return null;
if (!(lookup.getPsiFile() instanceof PsiJavaFile)) {
return null;
}
LookupElement item = lookup.getCurrentItem();
if (item == null) return null;
if (c == '!') {
if (lookup.getPsiFile() instanceof PsiJavaFile) {
final Object o = item.getObject();
if (o instanceof PsiVariable) {
if (PsiType.BOOLEAN.isAssignableFrom(((PsiVariable)o).getType())) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
}
if (o instanceof PsiMethod) {
final PsiType type = ((PsiMethod)o).getReturnType();
if (type != null && PsiType.BOOLEAN.isAssignableFrom(type)) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
}
return null;
final Object o = item.getObject();
if (o instanceof PsiVariable) {
if (PsiType.BOOLEAN.isAssignableFrom(((PsiVariable)o).getType())) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
}
if (o instanceof PsiMethod) {
final PsiType type = ((PsiMethod)o).getReturnType();
if (type != null && PsiType.BOOLEAN.isAssignableFrom(type)) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
}
return null;
}
if (c == '.' && isWithinLiteral(lookup)) return Result.ADD_TO_PREFIX;
if (c == '[') return CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP;
@@ -17,6 +17,8 @@ package org.jetbrains.plugins.groovy.lang.completion;
import com.intellij.codeInsight.lookup.CharFilter;
import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.GroovyFileType;
@@ -30,12 +32,15 @@ public class GroovyReferenceCharFilter extends CharFilter {
final PsiFile psiFile = lookup.getPsiFile();
if (psiFile != null && !psiFile.getViewProvider().getLanguages().contains(GroovyFileType.GROOVY_LANGUAGE)) return null;
LookupElement item = lookup.getCurrentItem();
if (item == null) return null;
if (Character.isJavaIdentifierPart(c) || c == '\'') {
return Result.ADD_TO_PREFIX;
}
if (c == '\n' || c == '\t') {
return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
}
if (c == '[') return CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP;
if (c == '<' && item.getObject() instanceof PsiClass) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
return null;
}
@@ -604,4 +604,34 @@ return fo<caret>"""
def foo(def a) {2}
return foo()"""
}
void checkCompletion(String before, String type, String after) {
myFixture.configureByText("a.groovy", before)
myFixture.completeBasic()
myFixture.type(type)
myFixture.checkResult(after)
}
public void testFinishClassNameWithSquareBracket() {
myFixture.addClass("class AbcdClass {}; class AbcdeClass {}")
checkCompletion("Abcd<caret>", '[', "AbcdClass[<caret>]")
}
public void testFinishMethodNameWithSquareBracket() {
myFixture.addClass("""class AbcdClass {
static int[] foo(int x){}
static int[] fobar(){}
}""")
checkCompletion("AbcdClass.fo<caret>", '[', "AbcdClass.fobar()[<caret>]")
}
public void testFinishVariableNameWithSquareBracket() {
checkCompletion("int[] fooo, foobar; foo<caret>", '[', "int[] fooo, foobar; foobar[<caret>]")
}
public void testFinishClassNameWithLt() {
myFixture.addClass("class AbcdClass {}; class AbcdeClass {}")
checkCompletion("Abcd<caret>", '<', "AbcdClass<<caret>>")
}
}