From 49505a205a375ceddbf7a95e3635fcb93e81fa4b Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Wed, 10 Apr 2019 18:43:47 +0300 Subject: [PATCH] IDEA-CR-46148: start actions delayed till ExternalProjectsManager initialized in edt --- .../manage/ExternalProjectsManagerImpl.java | 14 ++++++++------ .../AbstractExternalSystemToolWindowFactory.java | 7 ++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java index 4b90bcba7fc4..91f352517751 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java @@ -170,7 +170,7 @@ public class ExternalProjectsManagerImpl implements ExternalProjectsManager, Per synchronized (isInitializationFinished) { isInitializationFinished.set(true); - ApplicationManager.getApplication().executeOnPooledThread(() -> { + invokeLater(() -> { myPostInitializationActivities.run(); myPostInitializationActivities.clear(); }); @@ -183,14 +183,11 @@ public class ExternalProjectsManagerImpl implements ExternalProjectsManager, Per } @Override - public void runWhenInitialized(Runnable action) { + public void runWhenInitialized(@NotNull Runnable runnable) { if (isDisposed.get()) return; synchronized (isInitializationFinished) { - Runnable runnable = () -> { - if (!isDisposed.get()) action.run(); - }; if (isInitializationFinished.get()) { - ApplicationManager.getApplication().executeOnPooledThread(runnable); + invokeLater(runnable); } else { myPostInitializationActivities.add(runnable); @@ -198,6 +195,10 @@ public class ExternalProjectsManagerImpl implements ExternalProjectsManager, Per } } + private void invokeLater(@NotNull Runnable runnable) { + ApplicationManager.getApplication().invokeLater(runnable, o -> myProject.isDisposed() || isDisposed.get()); + } + public void updateExternalProjectData(ExternalProjectInfo externalProject) { // update external projects data ExternalProjectsDataStorage.getInstance(myProject).update(externalProject); @@ -302,6 +303,7 @@ public class ExternalProjectsManagerImpl implements ExternalProjectsManager, Per @Override public void dispose() { if (isDisposed.getAndSet(true)) return; + myPostInitializationActivities.clear(); myProjectsViews.clear(); myRunManagerListener.detach(); if (myWatcher != null) { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/AbstractExternalSystemToolWindowFactory.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/AbstractExternalSystemToolWindowFactory.java index d488d4870eda..fe0d0053df4e 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/AbstractExternalSystemToolWindowFactory.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/task/ui/AbstractExternalSystemToolWindowFactory.java @@ -1,11 +1,9 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.externalSystem.service.task.ui; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManager; import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl; -import com.intellij.openapi.externalSystem.util.ExternalSystemBundle; import com.intellij.openapi.externalSystem.view.ExternalProjectsViewImpl; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; @@ -36,14 +34,13 @@ public abstract class AbstractExternalSystemToolWindowFactory implements ToolWin contentManager.addContent(new ContentImpl(createInitializingLabel(), "", false)); - ExternalProjectsManager.getInstance(project).runWhenInitialized( - () -> ApplicationManager.getApplication().invokeLater(() -> { + ExternalProjectsManager.getInstance(project).runWhenInitialized(() -> { final ExternalProjectsViewImpl projectsView = new ExternalProjectsViewImpl(project, (ToolWindowEx)toolWindow, myExternalSystemId); ExternalProjectsManagerImpl.getInstance(project).registerView(projectsView); ContentImpl tasksContent = new ContentImpl(projectsView, "", true); contentManager.removeAllContents(true); contentManager.addContent(tasksContent); - }, project.getDisposed())); + }); } @NotNull