From 932474e0d529f4df6e84243001b183f13556c3f9 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 14 Jul 2017 11:18:52 +0200 Subject: [PATCH] IDEA-175869 No "int" completion in a for loop --- .../codeInsight/completion/JavaCompletionContributor.java | 2 +- .../codeInsight/completion/JavaKeywordCompletion.java | 5 ++--- .../codeInsight/completion/keywords/primitiveInForLoop.java | 5 +++++ .../java/codeInsight/completion/KeywordCompletionTest.java | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/keywords/primitiveInForLoop.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 442aa5b5a894..e0daaa0f0082 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -144,7 +144,7 @@ public class JavaCompletionContributor extends CompletionContributor { return null; } - if (JavaKeywordCompletion.START_FOR.accepts(position)) { + if (JavaKeywordCompletion.START_FOR.withParents(PsiJavaCodeReferenceElement.class, PsiExpressionStatement.class, PsiForStatement.class).accepts(position)) { return new OrFilter(ElementClassFilter.CLASS, ElementClassFilter.VARIABLE); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java index b70edd6d8f85..e67c9ceebdf1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java @@ -24,6 +24,7 @@ import com.intellij.codeInsight.lookup.*; import com.intellij.openapi.util.AtomicNotNullLazyValue; import com.intellij.openapi.util.NotNullLazyValue; import com.intellij.patterns.ElementPattern; +import com.intellij.patterns.PsiElementPattern; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.filters.*; @@ -144,9 +145,7 @@ public class JavaKeywordCompletion { } }; - static final ElementPattern START_FOR = - psiElement().afterLeaf(psiElement().withText("(").afterLeaf("for")).withParents(PsiJavaCodeReferenceElement.class, - PsiExpressionStatement.class, PsiForStatement.class); + static final PsiElementPattern START_FOR = psiElement().afterLeaf(psiElement().withText("(").afterLeaf("for")); private static final ElementPattern CLASS_REFERENCE = psiElement().withParent(psiReferenceExpression().referencing(psiClass().andNot(psiElement(PsiTypeParameter.class)))); diff --git a/java/java-tests/testData/codeInsight/completion/keywords/primitiveInForLoop.java b/java/java-tests/testData/codeInsight/completion/keywords/primitiveInForLoop.java new file mode 100644 index 000000000000..a29bd5156d49 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/primitiveInForLoop.java @@ -0,0 +1,5 @@ +public class Class2 { + void foo() { + for (int i) + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java index bc603d0e32c6..fae2c84cecdd 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/KeywordCompletionTest.java @@ -142,6 +142,7 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testIntInGenerics() { doTest(2, "int", "char", "final"); } public void testIntInGenerics2() { doTest(2, "int", "char", "final"); } public void testBreakInLabeledBlock() { doTest(1, "break label", "continue"); } + public void testPrimitiveInForLoop() { doTest(1, "int"); } public void testPrivateInJava9Interface() { setLanguageLevel(LanguageLevel.JDK_1_9); doTest(); } public void testTryInExpression() {