void (@NotNull InsertionContext context) { PsiVariable variable = getObject(); Document document = context.getDocument(); document.replaceString(context.getStartOffset(), context.getTailOffset(), variable.getName()); context.commitDocument(); if (variable instanceof PsiField) { if (willBeImported()) { RangeMarker toDelete = JavaCompletionUtil.insertTemporary(context.getTailOffset(), document, " "); context.commitDocument(); PsiReferenceExpression ref = findReference(context, context.getStartOffset()); if (ref != null) { if (ref.isQualified()) { return; // shouldn't happen, but sometimes we see exceptions because of this } ref.bindToElementViaStaticImport(((PsiField)variable).getContainingClass()); PostprocessReformattingAspect.getInstance(ref.getProject()).doPostponedFormatting(); } if (toDelete != null && toDelete.isValid()) { document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset()); } context.commitDocument(); } else if (shouldQualify((PsiField)variable, context)) { qualifyFieldReference(context, (PsiField)variable); } } PsiReferenceExpression ref = findReference(context, context.getTailOffset() - 1); if (ref != null) { JavaCodeStyleManager.getInstance(context.getProject()).shortenClassReferences(ref); } ref = findReference(context, context.getTailOffset() - 1); PsiElement target = ref == null ? null : ref.resolve(); if (target instanceof PsiLocalVariable || target instanceof PsiParameter) { makeFinalIfNeeded(context, (PsiVariable)target); } if (target == null && ref != null && JavaPsiFacade.getInstance(context.getProject()).getResolveHelper().resolveReferencedVariable(variable.getName(), ref) == null) { BringVariableIntoScopeFix fix = BringVariableIntoScopeFix.fromReference(ref); if (fix != null) { ActionContext actionContext = ActionContext.from(context.getEditor(), context.getFile()); if (fix.getPresentation(actionContext) != null) { ModCommandExecutor.getInstance().executeInteractively(actionContext, fix.perform(actionContext), context.getEditor()); } } } final char completionChar = context.getCompletionChar(); if (completionChar == '=') { context.setAddCompletionChar(false); EqTailType.INSTANCE.processTail(context.getEditor(), context.getTailOffset()); } else if (completionChar == ',' && getAttribute(LookupItem.TAIL_TYPE_ATTR) != TailTypes.unknownType()) { context.setAddCompletionChar(false); CommaTailType.INSTANCE.processTail(context.getEditor(), context.getTailOffset()); AutoPopupController.getInstance(context.getProject()).autoPopupParameterInfo(context.getEditor(), null); } else if (completionChar == ':' && getAttribute(LookupItem.TAIL_TYPE_ATTR) != TailTypes.unknownType() && isTernaryCondition(ref)) { context.setAddCompletionChar(false); TailTypes.conditionalExpressionColonType().processTail(context.getEditor(), context.getTailOffset()); } else if (completionChar == '.') { AutoPopupController.getInstance(context.getProject()).autoPopupMemberLookup(context.getEditor(), null); } else if (completionChar == '!' && myNegatable) { context.setAddCompletionChar(false); if (ref != null) { FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH); document.insertString(ref.getTextRange().getStartOffset(), "!"); } } else if (completionChar == Lookup.REPLACE_SELECT_CHAR) { removeEmptyCallParentheses(context); } }