From a2699c7de1d63fb33581bf5876fedd0d02c08c1f Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 10 May 2017 07:31:36 +0200 Subject: [PATCH] listen changes only after initial synchronizeSchemesAndRunConfigurations --- .../impl/ProjectRunConfigurationManager.kt | 35 +++++++++++++------ .../intellij/execution/impl/RunManagerImpl.kt | 9 ++++- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.kt b/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.kt index 4f261e2b036d..45402f3fb099 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/ProjectRunConfigurationManager.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.options.SchemeManagerFactory import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.startup.StartupActivity +import com.intellij.openapi.util.Key import com.intellij.openapi.util.Pair import com.intellij.openapi.util.registry.Registry import gnu.trove.THashSet @@ -33,17 +34,7 @@ internal class ProjectRunConfigurationStartupActivity : StartupActivity, DumbAwa return } - val eventPublisher = createRunManagerEventPublisher(project) - eventPublisher.beginUpdate() - try { - RunManagerImpl.getInstanceImpl(project) - ServiceManager.getService(project, ProjectRunConfigurationManager::class.java) - // important, especially for AppCode ("hack" (projectOpened listener) in the OCWorkspaceRunConfigurationListener removed in favour of platform fix) - eventPublisher.runConfigurationSelected() - } - finally { - eventPublisher.endUpdate() - } + requestLoadWorkspaceAndProjectRunConfiguration(project) if (!Registry.`is`("runManager.use.schemeManager", false)) { return @@ -57,6 +48,28 @@ internal class ProjectRunConfigurationStartupActivity : StartupActivity, DumbAwa } } +private val isInitializedKey = Key.create("RunManagerInitialized") + +fun requestLoadWorkspaceAndProjectRunConfiguration(project: Project) { + if (isInitializedKey.isIn(project)) { + return + } + + isInitializedKey.set(project, true) + + val eventPublisher = createRunManagerEventPublisher(project) + eventPublisher.beginUpdate() + try { + RunManagerImpl.getInstanceImpl(project) + ServiceManager.getService(project, ProjectRunConfigurationManager::class.java) + // important, especially for AppCode ("hack" (projectOpened listener) in the OCWorkspaceRunConfigurationListener removed in favour of platform fix) + eventPublisher.runConfigurationSelected() + } + finally { + eventPublisher.endUpdate() + } +} + @State(name = "ProjectRunConfigurationManager", storages = arrayOf(Storage(value = "runConfigurations", stateSplitter = ProjectRunConfigurationManager.RunConfigurationStateSplitter::class))) internal class ProjectRunConfigurationManager(manager: RunManager) : PersistentStateComponent { private val manager = manager as RunManagerImpl diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt index 231feeedab63..b6fbaf82d25b 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -625,7 +625,14 @@ open class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persi } name } - workspaceSchemeManager.reload() + + try { + eventPublisher.beginUpdate() + workspaceSchemeManager.reload() + } + finally { + eventPublisher.endUpdate() + } val order = ArrayList() @Suppress("DEPRECATION")