void (@NotNull InsertionContext context, @NotNull LookupElementDecorator<LookupElement> item) { final LookupElement delegate = item.getDelegate(); PsiClass psiClass = (PsiClass)item.getObject(); SmartPsiElementPointer<PsiClass> classPointer = SmartPointerManager.createPointer(psiClass); boolean isAbstract = psiClass.hasModifierProperty(PsiModifier.ABSTRACT); if (Lookup.REPLACE_SELECT_CHAR == context.getCompletionChar()) { JavaClassNameInsertHandler.overwriteTopmostReference(context); } context.commitDocument(); OffsetKey insideRef = context.trackOffset(context.getTailOffset(), false); PsiElement position = context.getFile().findElementAt(context.getStartOffset()); if (position == null) return; PsiAnonymousClass anonymousClass = PsiTreeUtil.getParentOfType(position, PsiAnonymousClass.class); boolean inAnonymous = anonymousClass != null && PsiTreeUtil.isAncestor(anonymousClass.getBaseClassReference(), position, false); if (delegate instanceof PsiTypeLookupItem) { if (context.getDocument().getTextLength() > context.getTailOffset() && context.getDocument().getCharsSequence().charAt(context.getTailOffset()) == '<') { PsiJavaCodeReferenceElement ref = JavaClassNameInsertHandler.findJavaReference(context.getFile(), context.getTailOffset() - 1); if (ref != null) { PsiReferenceParameterList parameterList = ref.getParameterList(); if (parameterList != null && context.getTailOffset() == parameterList.getTextRange().getStartOffset()) { context.getDocument().deleteString(parameterList.getTextRange().getStartOffset(), parameterList.getTextRange().getEndOffset()); context.commitDocument(); } } } delegate.handleInsert(context); PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(context.getFile().getViewProvider()); } if (item.getDelegate() instanceof JavaPsiClassReferenceElement && classPointer.getElement() != null) { PsiTypeLookupItem.addImportForItem(context, classPointer.getElement()); } if (classPointer.getElement() != null) { insertParentheses(context, delegate, classPointer.getElement(), !inAnonymous && isAbstract); } if (inAnonymous) { return; } if (mySmart) { FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.AFTER_NEW); } if (isAbstract) { PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(context.getFile().getViewProvider()); final Editor editor = context.getEditor(); final Document document = editor.getDocument(); final int offset = context.getTailOffset(); document.insertString(offset, " {}"); OffsetKey insideBraces = context.trackOffset(offset + 2, true); final PsiFile file = context.getFile(); PsiDocumentManager.getInstance(file.getProject()).commitDocument(document); reformatEnclosingExpressionListAtOffset(file, offset); if (promptTypeOrConstructorArgs(context, delegate, insideRef, insideBraces)) return; editor.getCaretModel().moveToOffset(context.getOffset(insideBraces)); context.setLaterRunnable(generateAnonymousBody(editor, file)); } else { PsiDocumentManager.getInstance(context.getProject()).commitAllDocuments(); final PsiNewExpression newExpression = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiNewExpression.class, false); if (newExpression != null) { final PsiJavaCodeReferenceElement classReference = newExpression.getClassOrAnonymousClassReference(); if (classReference != null) { CodeStyleManager.getInstance(context.getProject()).reformat(classReference); } } if (mySmart) { FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.AFTER_NEW); } promptTypeOrConstructorArgs(context, delegate, insideRef, null); } }