diff --git a/platform/code-style-api/api-dump.txt b/platform/code-style-api/api-dump.txt index 3df28260de60..1ba0cf035f28 100644 --- a/platform/code-style-api/api-dump.txt +++ b/platform/code-style-api/api-dump.txt @@ -303,6 +303,7 @@ a:com.intellij.formatting.service.AsyncDocumentFormattingService - p:getTimeout():java.time.Duration - p:getTimeoutActions(com.intellij.formatting.FormattingContext):com.intellij.openapi.actionSystem.AnAction[] - p:needToUpdate():Z +- p:prepareForFormatting(com.intellij.openapi.editor.Document,com.intellij.formatting.FormattingContext):V p:com.intellij.formatting.service.AsyncDocumentFormattingService$FormattingTask - java.lang.Runnable - a:cancel():Z diff --git a/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java b/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java index bb1ec09b476d..552e9be58735 100644 --- a/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java +++ b/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java @@ -72,6 +72,7 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor return; } } + prepareForFormatting(document, formattingContext); FormattingRequestImpl formattingRequest = new FormattingRequestImpl(formattingContext, document, formattingRanges, canChangeWhiteSpaceOnly, quickFormat); FormattingTask formattingTask = createFormattingTask(formattingRequest); @@ -134,6 +135,14 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor */ protected abstract @NotNull @NlsSafe String getName(); + /** + * Hook called before creating a formatting request. Default implementation saves the document + * to ensure external formatters working with IO files see the latest content. + */ + protected void prepareForFormatting(@NotNull Document document, @NotNull FormattingContext formattingContext) { + FileDocumentManager.getInstance().saveDocument(document); + } + /** * @return A duration to wait for the service to respond (call either {@code onTextReady()} or {@code onError()}). */ @@ -177,7 +186,6 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor myRanges = ranges; myCanChangeWhitespaceOnly = canChangeWhitespaceOnly; myQuickFormat = quickFormat; - FileDocumentManager.getInstance().saveDocument(myDocument); myInitialModificationStamp = document.getModificationStamp(); }