From cdcab124412ae123f20b61a53c545d72089a8764 Mon Sep 17 00:00:00 2001 From: Dmitry Semeniouta Date: Wed, 24 Jan 2018 16:49:14 +0300 Subject: [PATCH] PsiDocumentManager: make finishCommitInWriteAction non-cancellable --- .../psi/impl/PsiDocumentManagerBase.java | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index b0bf7e659a82..3fc51122f205 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -12,7 +12,6 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.*; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.diagnostic.ControlFlowException; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.DocumentRunnable; @@ -25,10 +24,7 @@ import com.intellij.openapi.editor.impl.EditorDocumentPriorities; import com.intellij.openapi.editor.impl.FrozenDocument; import com.intellij.openapi.editor.impl.event.RetargetRangeMarkers; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.progress.EmptyProgressIndicator; -import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressIndicatorProvider; +import com.intellij.openapi.progress.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.util.*; @@ -366,31 +362,29 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen FileViewProvider viewProvider = forceNoPsiCommit ? null : getCachedViewProvider(document); myIsCommitInProgress = true; - boolean success = true; + Ref success = new Ref<>(true); try { - if (viewProvider == null) { - handleCommitWithoutPsi(document); - } - else { - success = commitToExistingPsi(document, finishProcessors, reparseInjectedProcessors, synchronously, virtualFile, viewProvider); - } + ProgressManager.getInstance().executeNonCancelableSection(() -> { + if (viewProvider == null) { + handleCommitWithoutPsi(document); + } + else { + success.set(commitToExistingPsi(document, finishProcessors, reparseInjectedProcessors, synchronously, virtualFile, viewProvider)); + } + }); } catch (Throwable e) { - //noinspection InstanceofCatchParameter - if (!(e instanceof ControlFlowException)) { - LOG.error(e); - } - + LOG.error(e); forceReload(virtualFile, viewProvider); } finally { - if (success) { + if (success.get()) { myUncommittedDocuments.remove(document); } myIsCommitInProgress = false; } - return success; + return success.get(); } private boolean commitToExistingPsi(@NotNull Document document,