From be1b21475382cfd135bcce0f3e6c8558e9ee2f9d Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 14 Aug 2014 10:15:43 +0200 Subject: [PATCH] fix EDT assertion on project open (since ExecutionManager is project service, but not component) --- .../execution/impl/ExecutionManagerImpl.java | 8 +++- .../execution/ui/RunContentManagerImpl.java | 38 ++++++++----------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java index 6ee6538312da..73b373d0a1b2 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerImpl.java @@ -46,6 +46,7 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Trinity; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.ui.AppUIUtil; import com.intellij.ui.docking.DockManager; import com.intellij.util.Alarm; import com.intellij.util.SmartList; @@ -87,7 +88,12 @@ public class ExecutionManagerImpl extends ExecutionManager implements Disposable public RunContentManager getContentManager() { if (myContentManager == null) { myContentManager = new RunContentManagerImpl(myProject, DockManager.getInstance(myProject)); - myContentManager.init(); + AppUIUtil.invokeOnEdt(new Runnable() { + @Override + public void run() { + myContentManager.init(); + } + }, myProject.getDisposed()); Disposer.register(myProject, myContentManager); } return myContentManager; diff --git a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java index 038438d014fd..d0d31c938be2 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/RunContentManagerImpl.java @@ -76,41 +76,35 @@ public class RunContentManagerImpl implements RunContentManager, Disposable { Disposer.register(myProject, containerFactory); } + // must be called on EDT public void init() { for (Executor executor : ExecutorRegistry.getInstance().getRegisteredExecutors()) { registerToolwindow(executor); } - if (ToolWindowManager.getInstance(myProject) == null) return; + ToolWindowManagerEx toolWindowManager = ToolWindowManagerEx.getInstanceEx(myProject); + if (ToolWindowManager.getInstance(myProject) == null) { + return; + } - // To ensure ToolwindowManager had already initialized in its projectOpened. - SwingUtilities.invokeLater(new Runnable() { + toolWindowManager.addToolWindowManagerListener(new ToolWindowManagerAdapter() { @Override - public void run() { + public void stateChanged() { if (myProject.isDisposed()) { return; } - ((ToolWindowManagerEx)ToolWindowManager.getInstance(myProject)).addToolWindowManagerListener(new ToolWindowManagerAdapter() { - @Override - public void stateChanged() { - if (myProject.isDisposed()) { - return; - } - ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject); + ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(myProject); + Set currentWindows = new THashSet(); + ContainerUtil.addAll(currentWindows, toolWindowManager.getToolWindowIds()); + myToolwindowIdZBuffer.retainAll(currentWindows); - Set currentWindows = new THashSet(); - ContainerUtil.addAll(currentWindows, toolWindowManager.getToolWindowIds()); - myToolwindowIdZBuffer.retainAll(currentWindows); - - final String activeToolWindowId = toolWindowManager.getActiveToolWindowId(); - if (activeToolWindowId != null) { - if (myToolwindowIdZBuffer.remove(activeToolWindowId)) { - myToolwindowIdZBuffer.addFirst(activeToolWindowId); - } - } + final String activeToolWindowId = toolWindowManager.getActiveToolWindowId(); + if (activeToolWindowId != null) { + if (myToolwindowIdZBuffer.remove(activeToolWindowId)) { + myToolwindowIdZBuffer.addFirst(activeToolWindowId); } - }); + } } }); }