mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
IDEA-72776 JAVA: duplicate "boolean" autocomplete suggestion
This commit is contained in:
+1
-1
@@ -126,7 +126,7 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
return new ElementExtractorFilter(ElementClassFilter.CLASS);
|
||||
}
|
||||
|
||||
if (JavaCompletionData.AFTER_FINAL.accepts(position)) {
|
||||
if (JavaCompletionData.VARIABLE_AFTER_FINAL.accepts(position)) {
|
||||
return ElementClassFilter.CLASS;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,10 +22,7 @@ import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupItem;
|
||||
import com.intellij.codeInsight.lookup.TailTypeDecorator;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.patterns.PsiElementPattern;
|
||||
import com.intellij.patterns.PsiJavaElementPattern;
|
||||
import com.intellij.patterns.PsiJavaPatterns;
|
||||
import com.intellij.patterns.*;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.*;
|
||||
import com.intellij.psi.filters.classes.EnumOrAnnotationTypeFilter;
|
||||
@@ -58,7 +55,7 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
new ParentElementFilter(new ClassFilter(PsiExpression.class)),
|
||||
new ClassFilter(PsiExpression.class))))),
|
||||
new AndFilter(new TextFilter("]"), new ParentElementFilter(new ClassFilter(PsiArrayAccessExpression.class)))));
|
||||
public static final PsiJavaElementPattern.Capture<PsiElement> AFTER_FINAL =
|
||||
public static final PsiJavaElementPattern.Capture<PsiElement> VARIABLE_AFTER_FINAL =
|
||||
PsiJavaPatterns.psiElement().afterLeaf(PsiKeyword.FINAL).inside(PsiDeclarationStatement.class);
|
||||
public static final LeftNeighbour AFTER_TRY_BLOCK = new LeftNeighbour(new AndFilter(
|
||||
new TextFilter("}"),
|
||||
@@ -311,19 +308,6 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
// declaration start
|
||||
// position
|
||||
final CompletionVariant variant = new CompletionVariant(PsiClass.class, DECLARATION_START);
|
||||
variant.includeScopeClass(JspClassLevelDeclarationStatement.class);
|
||||
|
||||
// completion
|
||||
addPrimitiveTypes(variant);
|
||||
variant.addCompletion(PsiKeyword.VOID);
|
||||
|
||||
registerVariant(variant);
|
||||
}
|
||||
|
||||
{
|
||||
final CompletionVariant variant = new CompletionVariant(PsiElement.class, psiElement().afterLeaf(
|
||||
psiElement(PsiIdentifier.class).afterLeaf(
|
||||
@@ -359,7 +343,7 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
// completion for declarations
|
||||
final CompletionVariant variant = new CompletionVariant(new OrFilter(END_OF_BLOCK, new LeftNeighbour(new TextFilter(PsiKeyword.FINAL))));
|
||||
variant.includeScopeClass(PsiCodeBlock.class, false);
|
||||
addPrimitiveTypes(variant);
|
||||
addPrimitiveTypes(variant, CompletionVariant.DEFAULT_TAIL_TYPE);
|
||||
variant.addCompletion(PsiKeyword.CLASS);
|
||||
registerVariant(variant);
|
||||
}
|
||||
@@ -371,7 +355,7 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
new ParentElementFilter(new OrFilter(
|
||||
new ClassFilter(PsiParenthesizedExpression.class),
|
||||
new ClassFilter(PsiTypeCastExpression.class))))));
|
||||
addPrimitiveTypes(variant);
|
||||
addPrimitiveTypes(variant, CompletionVariant.DEFAULT_TAIL_TYPE);
|
||||
registerVariant(variant);
|
||||
}
|
||||
|
||||
@@ -386,17 +370,6 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
registerVariant(variant);
|
||||
}
|
||||
|
||||
{
|
||||
// after final keyword
|
||||
final ElementFilter position = new PatternFilter(AFTER_FINAL);
|
||||
final CompletionVariant variant = new CompletionVariant(position);
|
||||
variant.includeScopeClass(PsiDeclarationStatement.class, true);
|
||||
addPrimitiveTypes(variant);
|
||||
|
||||
registerVariant(variant);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
// Keyword completion in start of declaration
|
||||
final CompletionVariant variant = new CompletionVariant(PsiMethod.class, END_OF_BLOCK);
|
||||
@@ -465,10 +438,6 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
}
|
||||
}
|
||||
|
||||
private static void addPrimitiveTypes(CompletionVariant variant){
|
||||
addPrimitiveTypes(variant, CompletionVariant.DEFAULT_TAIL_TYPE);
|
||||
}
|
||||
|
||||
private static void addPrimitiveTypes(CompletionVariant variant, TailType tailType){
|
||||
variant.addCompletion(PRIMITIVE_TYPES, tailType);
|
||||
}
|
||||
@@ -553,11 +522,7 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
result.addElement(createKeyword(position, PsiKeyword.FALSE));
|
||||
}
|
||||
|
||||
if (START_FOR.accepts(position) || INSIDE_PARAMETER_LIST.accepts(position) && !AFTER_DOT.accepts(position)) {
|
||||
for (String primitiveType : PRIMITIVE_TYPES) {
|
||||
result.addElement(TailTypeDecorator.withTail(createKeyword(position, primitiveType), TailType.SPACE));
|
||||
}
|
||||
}
|
||||
addPrimitiveTypes(result, position);
|
||||
|
||||
if (psiElement().afterLeaf(psiElement().withText(".").inside(PsiExpression.class).afterLeaf(or(
|
||||
psiElement().withParent(psiElement().referencing(psiClass())),
|
||||
@@ -598,6 +563,22 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
}
|
||||
}
|
||||
|
||||
private static void addPrimitiveTypes(CompletionResultSet result, PsiElement position) {
|
||||
boolean declaration = DECLARATION_START.isAcceptable(position, position) ||
|
||||
psiElement().withParents(PsiJavaCodeReferenceElement.class, PsiTypeElement.class, PsiMember.class).accepts(position);
|
||||
if (START_FOR.accepts(position) ||
|
||||
INSIDE_PARAMETER_LIST.accepts(position) && !AFTER_DOT.accepts(position) ||
|
||||
VARIABLE_AFTER_FINAL.accepts(position) ||
|
||||
declaration) {
|
||||
for (String primitiveType : PRIMITIVE_TYPES) {
|
||||
result.addElement(new OverrideableSpace(createKeyword(position, primitiveType)));
|
||||
}
|
||||
}
|
||||
if (declaration) {
|
||||
result.addElement(new OverrideableSpace(createKeyword(position, PsiKeyword.VOID)));
|
||||
}
|
||||
}
|
||||
|
||||
private static void addBreakContinue(CompletionResultSet result, PsiElement position) {
|
||||
PsiLoopStatement loop = PsiTreeUtil.getParentOfType(position, PsiLoopStatement.class);
|
||||
|
||||
@@ -675,4 +656,15 @@ public class JavaCompletionData extends JavaAwareCompletionData{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static class OverrideableSpace extends TailTypeDecorator<LookupElement> {
|
||||
public OverrideableSpace(LookupElement keyword) {
|
||||
super(keyword);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TailType computeTailType(InsertionContext context) {
|
||||
return context.shouldAddCompletionChar() ? TailType.NONE : TailType.SPACE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
interface Foo {
|
||||
void getGooBarDoo();
|
||||
void bar(final b<caret>);
|
||||
}
|
||||
+6
-1
@@ -321,7 +321,7 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
|
||||
public void testIDEADEV6408() throws Exception {
|
||||
configureByFile("IDEADEV6408.java");
|
||||
assertEquals(2, myItems.length);
|
||||
assertStringItems "boolean", "byte"
|
||||
}
|
||||
|
||||
public void testMethodWithLeftParTailType() throws Exception {
|
||||
@@ -463,6 +463,11 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testDoubleBooleanInParameter() throws Throwable {
|
||||
configure()
|
||||
assertStringItems("boolean", "byte")
|
||||
}
|
||||
|
||||
public void testNotOnlyKeywordsInsideSwitch() throws Throwable {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user