diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 3d9b69bc6f5a..8ea7b391b37c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -155,7 +155,7 @@ public class JavaCompletionData extends JavaAwareCompletionData { private static final PsiJavaElementPattern.Capture CLASS_REFERENCE = psiElement().withParent(psiReferenceExpression().referencing(psiClass())); - public static final ElementPattern EXPR_KEYWORDS = and( + private static final ElementPattern EXPR_KEYWORDS = and( psiElement().withParent(psiElement(PsiReferenceExpression.class).withParent( not( or(psiElement(PsiTypeCastExpression.class), @@ -455,7 +455,7 @@ public class JavaCompletionData extends JavaAwareCompletionData { } } - if (EXPR_KEYWORDS.accepts(position)) { + if (isExpressionPosition(position)) { if (PsiTreeUtil.getParentOfType(position, PsiAnnotation.class) == null) { result.addElement(TailTypeDecorator.withTail(createKeyword(position, PsiKeyword.NEW), TailType.INSERT_SPACE)); result.addElement(createKeyword(position, PsiKeyword.NULL)); @@ -516,6 +516,11 @@ public class JavaCompletionData extends JavaAwareCompletionData { } } + private static boolean isExpressionPosition(PsiElement position) { + return EXPR_KEYWORDS.accepts(position) || + psiElement().insideStarting(psiElement(PsiClassObjectAccessExpression.class)).accepts(position); + } + public static boolean isInstanceofPlace(PsiElement position) { return INSTANCEOF_PLACE.isAcceptable(position, position); } @@ -590,16 +595,18 @@ public class JavaCompletionData extends JavaAwareCompletionData { boolean typeFragment = position.getContainingFile() instanceof PsiTypeCodeFragment && PsiTreeUtil.prevVisibleLeaf(position) == null; boolean declaration = DECLARATION_START.accepts(position); + boolean expressionPosition = isExpressionPosition(position); if (START_FOR.accepts(position) || isInsideParameterList(position) && !AFTER_DOT.accepts(position) || VARIABLE_AFTER_FINAL.accepts(position) || inCast || declaration || typeFragment || + expressionPosition || isStatementPosition(position)) { for (String primitiveType : PRIMITIVE_TYPES) { LookupElement keyword = createKeyword(position, primitiveType); - result.addElement(inCast || typeFragment ? keyword : new OverrideableSpace(keyword, TailType.HUMBLE_SPACE_BEFORE_WORD)); + result.addElement(inCast || typeFragment || expressionPosition ? keyword : new OverrideableSpace(keyword, TailType.HUMBLE_SPACE_BEFORE_WORD)); } } if (declaration) { diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java new file mode 100644 index 000000000000..4dd1b78d9cf1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray.java @@ -0,0 +1,5 @@ +public class Util { + int goo() { + Class[] c = {AbstractMethodError.class, } + } +} diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java new file mode 100644 index 000000000000..9b4eb8d36fbe --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray2.java @@ -0,0 +1,5 @@ +public class Util { + int goo() { + new Class[]{AbstractMethodError.class, .class} + } +} diff --git a/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java new file mode 100644 index 000000000000..5073a5481f72 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/intInClassArray3.java @@ -0,0 +1,5 @@ +public class Util { + int goo() { + new Class[]{} + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java index fddf4537e278..8d54d1205dc8 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java @@ -104,6 +104,9 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testReturnInTernary() throws Exception { doTest(1, "return"); } public void testFinalAfterParameterAnno() throws Exception { doTest(2, "final", "float", "class"); } public void testClassInMethod() throws Exception { doTest(2, "class", "char"); } + public void testIntInClassArray() throws Throwable { doTest(2, "int", "char", "final"); } + public void testIntInClassArray2() throws Throwable { doTest(2, "int", "char", "final"); } + public void testIntInClassArray3() throws Throwable { doTest(2, "int", "char", "final"); } public void testTryInExpression() throws Exception { configureByFile(BASE_PATH + "/" + getTestName(true) + ".java"); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy index df1588a69eab..31348ed15cf4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionOrderingTest.groovy @@ -48,7 +48,7 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase { } public void testReturnF() throws Throwable { - checkPreferredItems(0, "false", "finalize"); + checkPreferredItems(0, "false", "float", "finalize"); } public void testPreferDefaultTypeToExpected() throws Throwable { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index d104f4a1c67a..ff1e784bcc07 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -773,7 +773,7 @@ public class ListUtils { public void testDoubleFalse() throws Throwable { configureByFile(getTestName(false) + ".java"); - assertFirstStringItems("false", "fefefef", "finalize"); + assertFirstStringItems("false", "fefefef", "float", "finalize"); } public void testSameNamedVariableInNestedClasses() throws Throwable {