From a7821e5bdff340392b476fa7ef9abd4250ea31bf Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 26 Jul 2017 11:20:42 +0200 Subject: [PATCH] java completion: don't suggest class keywords in array variable initializer (IDEA-CR-23174) --- .../codeInsight/completion/JavaKeywordCompletion.java | 8 ++++---- ....java => noClassKeywordsInFieldArrayInitializer.java} | 0 .../keywords/noClassKeywordsInLocalArrayInitializer.java | 9 +++++++++ .../codeInsight/completion/KeywordCompletionTest.java | 3 ++- 4 files changed, 15 insertions(+), 5 deletions(-) rename java/java-tests/testData/codeInsight/completion/keywords/{noClassKeywordsInArrayInitializer.java => noClassKeywordsInFieldArrayInitializer.java} (100%) create mode 100644 java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInLocalArrayInitializer.java 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 2e9882f56f8d..62da46d0a493 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaKeywordCompletion.java @@ -516,12 +516,12 @@ public class JavaKeywordCompletion { addKeyword(new OverridableSpace(createKeyword(s), TailType.HUMBLE_SPACE_BEFORE_WORD)); } - boolean inExpression = PsiTreeUtil.getParentOfType(myPosition, PsiExpression.class, true, PsiMember.class) != null; - boolean inCodeBlock = PsiTreeUtil.getParentOfType(myPosition, PsiCodeBlock.class, true, PsiMember.class) != null; - if (inCodeBlock || !inExpression) { + PsiExpression expression = PsiTreeUtil.getParentOfType(myPosition, PsiExpression.class, true, PsiMember.class); + if (expression != null && expression.getParent() instanceof PsiExpressionStatement) { addKeyword(new OverridableSpace(createKeyword(PsiKeyword.CLASS), TailType.HUMBLE_SPACE_BEFORE_WORD)); } - if (!inExpression) { + if (expression == null && PsiTreeUtil.getParentOfType(myPosition, PsiCodeBlock.class, true, PsiMember.class) == null) { + addKeyword(new OverridableSpace(createKeyword(PsiKeyword.CLASS), TailType.HUMBLE_SPACE_BEFORE_WORD)); addKeyword(new OverridableSpace(createKeyword(PsiKeyword.INTERFACE), TailType.HUMBLE_SPACE_BEFORE_WORD)); if (PsiUtil.isLanguageLevel5OrHigher(myPosition)) { addKeyword(new OverridableSpace(createKeyword(PsiKeyword.ENUM), TailType.INSERT_SPACE)); diff --git a/java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInArrayInitializer.java b/java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInFieldArrayInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInArrayInitializer.java rename to java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInFieldArrayInitializer.java diff --git a/java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInLocalArrayInitializer.java b/java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInLocalArrayInitializer.java new file mode 100644 index 000000000000..dd8f9c14b8f5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/noClassKeywordsInLocalArrayInitializer.java @@ -0,0 +1,9 @@ +class MyTest { + void foo() { + String[] a = new String[]{ + "a", + "b"}; + } + +} + 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 a9a8c5cde5a7..e4696d341a88 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 @@ -125,7 +125,8 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testPrimitivesInClassAnnotationAttribute() { doTest(3, "true", "int", "boolean"); } public void testPrimitivesInMethodReturningArray() { doTest(2, "true", "byte", "boolean"); } - public void testNoClassKeywordsInArrayInitializer() { doTest(0, "class", "interface", "enum"); } + public void testNoClassKeywordsInLocalArrayInitializer() { doTest(0, "class", "interface", "enum"); } + public void testNoClassKeywordsInFieldArrayInitializer() { doTest(0, "class", "interface", "enum"); } public void testImportStatic() { doTest(1, "static"); } public void testAbstractInInterface() { doTest(1, "abstract"); }