public void actionPerformed()

in src/main/java/org/jetbrains/uncrustify/UncrustifyDevAction.java [75:114]


    public void actionPerformed(@NotNull AnActionEvent e) {
        List<FormattingService> serviceList = FormattingService.EP_NAME.getExtensionList();

        FormattingService coreService = serviceList.stream().filter((s) -> s instanceof CoreFormattingService).findFirst().orElse(null);
        FormattingService uncrustifyService = serviceList.stream().filter((s) -> s instanceof UncrustifyAsyncFormattingService).findFirst().orElse(null);
        if (coreService == null|| uncrustifyService == null) {
            return;
        }

        DataContext dataContext = e.getDataContext();
        Project project = CommonDataKeys.PROJECT.getData(dataContext);
        if (project == null) {
            return;
        }

        PsiFile fileToFormat = getCurrentlySelectedFile(e);
        if (fileToFormat == null) {
            return;
        }
        String fileToFormatExtension = FileUtilRt.getExtension(fileToFormat.getName());

        String textToFormat = Objects.requireNonNull(PsiDocumentManager.getInstance(project).getDocument(fileToFormat)).getText();

        VirtualFile coreFormattedFile = new LightVirtualFile("ij." + fileToFormatExtension, fileToFormat.getLanguage(), textToFormat);
        VirtualFile uncrustifyFormattedFile = new LightVirtualFile("uncrustify." + fileToFormatExtension, fileToFormat.getLanguage(), textToFormat);

        PsiFile uffPsi = PsiManager.getInstance(project).findFile(uncrustifyFormattedFile);
        PsiFile cffPsi = PsiManager.getInstance(project).findFile(coreFormattedFile);

        if (uffPsi == null || cffPsi == null) {
            return;
        }

        WriteCommandAction.writeCommandAction(project).run(() -> coreService.formatRanges(cffPsi, new FormatTextRanges(cffPsi.getTextRange(), true), false, false));
        WriteCommandAction.writeCommandAction(project).run(() -> uncrustifyService.formatRanges(uffPsi, new FormatTextRanges(uffPsi.getTextRange(), true), false, false));

        DiffRequest diffRequest = DiffRequestFactory.getInstance().createFromFiles(project, coreFormattedFile, uncrustifyFormattedFile);
        DiffVirtualFile dvf = new SimpleDiffVirtualFile(diffRequest);
        FileEditorManager.getInstance(project).openFile(dvf, true);
    }