in src/main/com/intellij/lang/jsgraphql/ide/validation/fixes/GraphQLMissingTypeFix.java [64:104]
public void invoke(@NotNull Project project,
@NotNull PsiFile psiFile,
@Nullable("is null when called from inspection") Editor editor,
@NotNull PsiElement startElement,
@NotNull PsiElement endElement) {
if (editor == null) {
editor = PsiEditorUtil.getInstance().findEditorByPsiElement(startElement);
if (editor == null) {
return;
}
}
final GraphQLDefinition definition = PsiTreeUtil.getParentOfType(startElement, GraphQLDefinition.class);
if (definition == null) {
return;
}
editor.getCaretModel().moveToOffset(definition.getTextRange().getEndOffset() + 1);
String code = StringUtil.toLowerCase(typeKind.name()) + " " + typeName;
String caret = "__caret__";
switch (typeKind) {
case ENUM, TYPE, INTERFACE, INPUT -> code += " {\n" + caret + "\n}";
case SCALAR -> code += caret;
case UNION -> code += " = " + caret;
}
final PsiFile codeFile = PsiFileFactory.getInstance(project).createFileFromText("", GraphQLLanguage.INSTANCE, code);
CodeStyleManager.getInstance(project).reformat(codeFile);
assert codeFile.getViewProvider().getDocument() != null;
CodeStyleManager.getInstance(project).reformat(codeFile);
final Document document = codeFile.getViewProvider().getDocument();
if (document != null) {
code = document.getText();
}
int caretDelta = 0;
if (code.contains(caret)) {
caretDelta = code.indexOf(caret) + 1;
code = code.replace(caret, "");
}
final String lineBefore = definition.getNextSibling() instanceof PsiWhiteSpace ? "" : "\n";
EditorModificationUtilEx.insertStringAtCaret(editor, lineBefore + "\n" + code + "\n", false, caretDelta);
}