From 6b5d564822885371d72c8caf652ffe0612830d96 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 23 Nov 2012 21:51:56 +0100 Subject: [PATCH] [^romka] IDEA-95710 autocomplete is too agressive when assigning array of primitive type to an Object (cherry-picked from 538ffdf) --- .../completion/JavaCompletionData.java | 5 ++++- .../completion/JavaAutoPopupTest.groovy | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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 e143706d6eed..8f3301c1e798 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -605,6 +605,8 @@ 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); + boolean afterNew = psiElement().afterLeaf( + psiElement().withText(PsiKeyword.NEW).andNot(psiElement().afterLeaf(PsiKeyword.THROW, "."))).accepts(position); boolean inGenerics = PsiTreeUtil.getParentOfType(position, PsiReferenceParameterList.class) != null; if (START_FOR.accepts(position) || isInsideParameterList(position) || @@ -613,9 +615,10 @@ public class JavaCompletionData extends JavaAwareCompletionData { inCast || declaration || typeFragment || + afterNew || expressionPosition || isStatementPosition(position)) { - boolean needSpace = !inCast && !typeFragment && !expressionPosition && !inGenerics; + boolean needSpace = !inCast && !typeFragment && !expressionPosition && !inGenerics && !afterNew; for (String primitiveType : PRIMITIVE_TYPES) { LookupElement keyword = createKeyword(position, primitiveType); result.addElement(needSpace ? new OverrideableSpace(keyword, TailType.HUMBLE_SPACE_BEFORE_WORD) : keyword); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 42d53966144b..904e83c41fe9 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -1359,4 +1359,23 @@ class Foo { myTester.joinAlarm() } + public void "test new primitive array in Object variable"() { + CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE + myFixture.configureByText 'a.java', ''' +class Foo { + void foo() { + Object o = new + } +} +''' + type 'int[' + myFixture.checkResult ''' +class Foo { + void foo() { + Object o = new int[] + } +} +''' + } + }