public void invoke()

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);
  }