require editors top be opened/closed in write-safe contexts (IDEA-164464, EA-104751, EA-94233)

This commit is contained in:
peter
2017-09-05 09:54:34 +02:00
parent 82c00abcf7
commit fc29f45c53
2 changed files with 10 additions and 5 deletions
@@ -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);
@@ -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;
}
});