mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix EDT assertion on project open (since ExecutionManager is project service, but not component)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user