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")