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