mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-72071 Groovy: Completion: Completion variants contains modifiers which already typed
This commit is contained in:
@@ -51,7 +51,7 @@ public class ModifierChooser {
|
||||
return addClassModifiers(list);
|
||||
}
|
||||
if (scope instanceof PsiClass) {
|
||||
return addMemberModifiers(list, (PsiClass)scope);
|
||||
return addMemberModifiers(list, ((PsiClass)scope).isInterface());
|
||||
}
|
||||
|
||||
scope = scope.getParent();
|
||||
@@ -67,8 +67,8 @@ public class ModifierChooser {
|
||||
});
|
||||
}
|
||||
|
||||
public static String[] addMemberModifiers(PsiModifierList list, PsiClass scope) {
|
||||
return addKeywords(list, scope.isInterface() ? new String[][]{
|
||||
public static String[] addMemberModifiers(PsiModifierList list, final boolean inInterface) {
|
||||
return addKeywords(list, inInterface ? new String[][]{
|
||||
new String[]{"public", "protected"},
|
||||
new String[]{"static"},
|
||||
new String[]{"final"}
|
||||
|
||||
+9
-4
@@ -20,14 +20,13 @@ package org.jetbrains.plugins.groovy.lang.completion;
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.ModifierChooser;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.lookup.TailTypeDecorator;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiErrorElement;
|
||||
import com.intellij.psi.PsiKeyword;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.templateLanguages.OuterLanguageElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -112,7 +111,7 @@ public class GroovyCompletionData {
|
||||
}
|
||||
} else {
|
||||
if (suggestModifiers(position)) {
|
||||
addKeywords(result, true, MODIFIERS);
|
||||
addModifiers(position, result);
|
||||
}
|
||||
if (psiElement().afterLeaf(MODIFIERS).accepts(position) ||
|
||||
GroovyCompletionUtil.isInTypeDefinitionBody(position) && GroovyCompletionUtil.isNewStatement(position, true)) {
|
||||
@@ -126,6 +125,12 @@ public class GroovyCompletionData {
|
||||
}
|
||||
}
|
||||
|
||||
public static void addModifiers(PsiElement position, CompletionResultSet result) {
|
||||
PsiClass scope = PsiTreeUtil.getParentOfType(position, PsiClass.class);
|
||||
PsiModifierList modifierList = ModifierChooser.findModifierList(position);
|
||||
addKeywords(result, true, ModifierChooser.addMemberModifiers(modifierList, scope != null && scope.isInterface()));
|
||||
}
|
||||
|
||||
private static void addTypeDefinitionKeywords(CompletionResultSet result, PsiElement position) {
|
||||
if (suggestClassInterfaceEnum(position)) {
|
||||
addKeywords(result, true, PsiKeyword.CLASS, PsiKeyword.INTERFACE, PsiKeyword.ENUM);
|
||||
|
||||
+8
@@ -966,4 +966,12 @@ class X {
|
||||
public void testPrimitiveCastOverwrite() {
|
||||
checkCompletion 'byte v1 = (by<caret>te) 0', '\t', 'byte v1 = (byte<caret>) 0'
|
||||
}
|
||||
|
||||
public void testNoRepeatingModifiers() {
|
||||
myFixture.configureByText 'a.groovy', 'class A { public static <caret> }'
|
||||
myFixture.completeBasic()
|
||||
assert !('public' in myFixture.lookupElementStrings)
|
||||
assert !('static' in myFixture.lookupElementStrings)
|
||||
assert 'final' in myFixture.lookupElementStrings
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user