From fc29f45c53d4bc62198b456ace092de103265d47 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 5 Sep 2017 09:37:53 +0200 Subject: [PATCH] require editors top be opened/closed in write-safe contexts (IDEA-164464, EA-104751, EA-94233) --- .../intellij/openapi/fileEditor/impl/EditorWindow.java | 6 ++++++ .../openapi/fileEditor/impl/FileEditorManagerImpl.java | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java index 77191e55b130..613f6ed9b3f3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java @@ -22,6 +22,8 @@ import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.TransactionGuard; +import com.intellij.openapi.application.TransactionGuardImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; @@ -286,6 +288,8 @@ public class EditorWindow { finally { editorManager.removeSelectionRecord(file, this); + ((TransactionGuardImpl)TransactionGuard.getInstance()).assertWriteActionAllowed(); + editorManager.notifyPublisher(() -> { final Project project = editorManager.getProject(); if (!project.isDisposed()) { @@ -1194,6 +1198,8 @@ public class EditorWindow { } public void clear() { + ((TransactionGuardImpl)TransactionGuard.getInstance()).assertWriteActionAllowed(); + FileEditorManagerImpl manager = getManager(); FileEditorManagerListener.Before beforePublisher = manager.getProject().getMessageBus().syncPublisher(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 315fb92ace66..a47e25a69b99 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -23,9 +23,7 @@ import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.UISettingsListener; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.application.*; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.components.PersistentStateComponent; @@ -845,6 +843,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Persis } HeavyProcessLatch.INSTANCE.prioritizeUiActivity(); + ((TransactionGuardImpl)TransactionGuard.getInstance()).assertWriteActionAllowed(); compositeRef.set(window.findFileComposite(file)); boolean newEditor = compositeRef.isNull(); @@ -956,7 +955,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Persis } }; - UIUtil.invokeAndWaitIfNeeded(runnable); + ApplicationManager.getApplication().invokeAndWait(runnable); EditorWithProviderComposite composite = compositeRef.get(); return Pair.create(composite == null ? EMPTY_EDITOR_ARRAY : composite.getEditors(), @@ -1031,7 +1030,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Persis runnable.run(); done.setDone(); } - }); + }, ModalityState.current()); return done; } });