fix EDT assertion on project open (since ExecutionManager is project service, but not component)

This commit is contained in:
Vladimir Krivosheev
2014-08-14 10:15:43 +02:00
parent 5d2ec7c8ae
commit be1b214753
2 changed files with 23 additions and 23 deletions
@@ -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;
@@ -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<String> currentWindows = new THashSet<String>();
ContainerUtil.addAll(currentWindows, toolWindowManager.getToolWindowIds());
myToolwindowIdZBuffer.retainAll(currentWindows);
Set<String> currentWindows = new THashSet<String>();
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);
}
});
}
}
});
}