void (final InsertionContext context, final JavaPsiClassReferenceElement item) { final Editor editor = context.getEditor(); final PsiClass psiClass = item.getObject(); if (!psiClass.isValid()) return; int endOffset = editor.getCaretModel().getOffset(); final String qname = psiClass.getQualifiedName(); if (qname == null) return; if (endOffset == 0) return; final Document document = editor.getDocument(); final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(psiClass.getProject()); final PsiFile file = context.getFile(); if (file.findElementAt(endOffset - 1) == null) return; final OffsetKey key = OffsetKey.create("endOffset", false); context.getOffsetMap().addOffset(key, endOffset); PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(); final int newOffset = context.getOffsetMap().getOffset(key); if (newOffset >= 0) { endOffset = newOffset; } else { LOG.error(endOffset + " became invalid: " + context.getOffsetMap() + "; inserting " + qname); } final RangeMarker toDelete = JavaCompletionUtil.insertTemporary(endOffset, document, " "); psiDocumentManager.commitAllDocuments(); PsiReference psiReference = file.findReferenceAt(endOffset - 1); boolean insertFqn = true; if (psiReference != null) { final PsiManager psiManager = file.getManager(); if (psiManager.areElementsEquivalent(psiClass, JavaCompletionUtil.resolveReference(psiReference))) { insertFqn = false; } else if (psiClass.isValid()) { try { context .setTailOffset(psiReference.getRangeInElement().getEndOffset() + psiReference.getElement().getTextRange().getStartOffset()); final PsiElement newUnderlying = psiReference.bindToElement(psiClass); if (newUnderlying != null) { final PsiElement psiElement = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(newUnderlying); if (psiElement != null) { for (final PsiReference reference : psiElement.getReferences()) { if (psiManager.areElementsEquivalent(psiClass, JavaCompletionUtil.resolveReference(reference))) { insertFqn = false; break; } } } } } catch (IncorrectOperationException e) { //if it's empty we just insert fqn below } } } if (toDelete != null && toDelete.isValid()) { document.deleteString(toDelete.getStartOffset(), toDelete.getEndOffset()); context.setTailOffset(toDelete.getStartOffset()); } if (insertFqn) { INSERT_FQN.handleInsert(context, item); } }