diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java index ec822ba53619..11cfe66ef6c0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java @@ -27,8 +27,8 @@ import com.intellij.psi.*; import com.intellij.psi.impl.DebugUtil; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.impl.source.PsiClassReferenceType; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.intellij.psi.util.PsiUtilBase; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -93,7 +93,7 @@ public class PsiTypeLookupItem extends LookupItem { PsiElement position = context.getFile().findElementAt(context.getStartOffset()); assert position != null; - boolean afterNew = JavaCompletionContributor.isInJavaContext(position) && JavaSmartCompletionContributor.AFTER_NEW.accepts(position); + boolean addBraces = shouldAddBraces(position); int genericsStart = context.getTailOffset(); context.getDocument().insertString(genericsStart, JavaCompletionUtil.escapeXmlIfNeeded(context, calcGenerics(position, context))); JavaCompletionUtil.shortenReference(context.getFile(), genericsStart - 1); @@ -102,7 +102,7 @@ public class PsiTypeLookupItem extends LookupItem { String braces = StringUtil.repeat("[]", getBracketsCount()); Editor editor = context.getEditor(); if (!braces.isEmpty()) { - if (LookupEvent.isSpecialCompletionChar(context.getCompletionChar()) && afterNew) { + if (LookupEvent.isSpecialCompletionChar(context.getCompletionChar()) && addBraces) { context.getDocument().insertString(tail, braces + "{}"); editor.getCaretModel().moveToOffset(tail + braces.length() + 1); } else { @@ -125,6 +125,14 @@ public class PsiTypeLookupItem extends LookupItem { } } + private static boolean shouldAddBraces(PsiElement position) { + if (!JavaCompletionContributor.isInJavaContext(position) || !JavaSmartCompletionContributor.AFTER_NEW.accepts(position)) { + return false; + } + PsiNewExpression newExpression = PsiTreeUtil.getParentOfType(position, PsiNewExpression.class); + return newExpression != null && newExpression.getParent() instanceof PsiExpressionList; + } + public String calcGenerics(@NotNull PsiElement context, InsertionContext insertionContext) { if (insertionContext.getCompletionChar() == '<') { return ""; diff --git a/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java b/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java index 0a84ee9cc66b..a0db73a070a7 100644 --- a/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java +++ b/java/java-tests/testData/codeInsight/completion/smartType/generics/after8.java @@ -2,6 +2,6 @@ class List {} class C { void foo () { - List[] array = new List[]{}; + List[] array = new List[]; } } \ No newline at end of file