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 ba8486b69c2a..a9167f297091 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.TailTypes; import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupItem; +import com.intellij.codeInsight.lookup.PsiTypeLookupItem; import com.intellij.codeInsight.lookup.TailTypeDecorator; import com.intellij.patterns.ElementPattern; import com.intellij.patterns.PsiJavaElementPattern; @@ -612,6 +613,17 @@ public class JavaCompletionData extends JavaAwareCompletionData { return; } + boolean afterNew = psiElement().afterLeaf( + psiElement().withText(PsiKeyword.NEW).andNot(psiElement().afterLeaf(PsiKeyword.THROW, "."))).accepts(position); + if (afterNew) { + PsiElementFactory factory = JavaPsiFacade.getElementFactory(position.getProject()); + for (String primitiveType : PRIMITIVE_TYPES) { + result.addElement(PsiTypeLookupItem.createLookupItem(factory.createTypeFromText(primitiveType + "[]", null), null)); + } + result.addElement(PsiTypeLookupItem.createLookupItem(factory.createTypeFromText("void[]", null), null)); + return; + } + boolean inCast = psiElement() .afterLeaf(psiElement().withText("(").withParent(psiElement(PsiParenthesizedExpression.class, PsiTypeCastExpression.class))) .accepts(position); @@ -619,8 +631,6 @@ 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) || @@ -629,7 +639,6 @@ public class JavaCompletionData extends JavaAwareCompletionData { inCast || declaration || typeFragment || - afterNew || expressionPosition || isStatementPosition(position)) { for (String primitiveType : PRIMITIVE_TYPES) { 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 a55697a9d0b9..74a71e5d108b 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -21,6 +21,7 @@ import com.intellij.codeInsight.editorActions.CompletionAutoPopupHandler import com.intellij.codeInsight.lookup.Lookup import com.intellij.codeInsight.lookup.LookupElementPresentation import com.intellij.codeInsight.lookup.LookupManager +import com.intellij.codeInsight.lookup.PsiTypeLookupItem import com.intellij.codeInsight.lookup.impl.LookupImpl import com.intellij.codeInsight.template.impl.TemplateManagerImpl import com.intellij.ide.DataManager @@ -1331,7 +1332,10 @@ class Foo { } } ''' - type 'int[' + type 'int' + myFixture.assertPreferredCompletionItems 0, 'int', 'Integer' + assert ((PsiTypeLookupItem) myFixture.lookupElements[0]).bracketsCount == 1 + type '[' myFixture.checkResult ''' class Foo { void foo() {