void (@NotNull InsertionContext context, @NotNull LookupElement item) { PsiElement element = context.getFile().findElementAt(context.getStartOffset()); JsonStringLiteral literal = PsiTreeUtil.getParentOfType(element, JsonStringLiteral.class, false); if (literal == null) return; JsonProperty property = ObjectUtils.tryCast(literal.getParent(), JsonProperty.class); if (property == null) return; final TextRange toDelete; String textToInsert = ""; TextRange literalRange = literal.getTextRange(); if (literal.getValue().equals(myNewValue)) { toDelete = new TextRange(literalRange.getEndOffset(), literalRange.getEndOffset()); } else { toDelete = literalRange; textToInsert = StringUtil.wrapWithDoubleQuote(myNewValue); } int newCaretOffset = literalRange.getStartOffset() + 1 + myNewValue.length(); boolean showAutoPopup = false; if (property.getNameElement().equals(literal)) { if (property.getValue() == null) { textToInsert += ":\"\""; newCaretOffset += 3; // "package<caret offset>":"<new caret offset>" if (needCommaAfter(property)) { textToInsert += ","; } showAutoPopup = true; } } context.getDocument().replaceString(toDelete.getStartOffset(), toDelete.getEndOffset(), textToInsert); context.getEditor().getCaretModel().moveToOffset(newCaretOffset); reformat(context, toDelete.getStartOffset(), toDelete.getStartOffset() + textToInsert.length()); if (showAutoPopup) { AutoPopupController.getInstance(context.getProject()).autoPopupMemberLookup(context.getEditor(), null); } }