mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[ and < to finish completion in groovy (IDEA-40461)
This commit is contained in:
@@ -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;
|
||||
|
||||
+8
-3
@@ -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;
|
||||
}
|
||||
|
||||
+30
@@ -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>>")
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user