PsiDocumentManager: make finishCommitInWriteAction non-cancellable

This commit is contained in:
Dmitry Semeniouta
2018-01-24 16:51:23 +03:00
parent 4e220b81b9
commit cdcab12441
@@ -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<Boolean> 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,