From ecfb5a3dfddfc8bc79e73f08489c9ceae788c516 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 8 Oct 2019 19:12:58 +0200 Subject: [PATCH] Allow dynamic load/unload for GitOrigin-RevId: 21521546551d00dfbfaf8684abb81a4ccc7bbd8e --- .../intellij/execution/impl/RunManagerImpl.kt | 21 +++++++++++++++++++ .../RunnerAndConfigurationSettingsImpl.kt | 15 +++++++++---- .../src/META-INF/LangExtensionPoints.xml | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) 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 5e8599d69456..6dd98ed6263e 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -14,6 +14,8 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.* import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.diagnostic.runAndLogException +import com.intellij.openapi.extensions.ExtensionPointListener +import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.extensions.ProjectExtensionPointName import com.intellij.openapi.options.SchemeManager import com.intellij.openapi.options.SchemeManagerFactory @@ -194,6 +196,25 @@ open class RunManagerImpl @JvmOverloads constructor(val project: Project, shared } }) } + + ConfigurationType.CONFIGURATION_TYPE_EP.addExtensionPointListener(object : ExtensionPointListener { + override fun extensionAdded(extension: ConfigurationType, pluginDescriptor: PluginDescriptor) { + idToType.drop() + project.stateStore.reloadState(RunManagerImpl::class.java) + } + + override fun extensionRemoved(extension: ConfigurationType, pluginDescriptor: PluginDescriptor) { + idToType.drop() + for (runnerAndConfigurationSettings in allSettings) { + val settingsImpl = runnerAndConfigurationSettings as RunnerAndConfigurationSettingsImpl + if (settingsImpl.type == extension) { + val configuration = UnknownConfigurationType.getInstance().createTemplateConfiguration(project) + configuration.name = settingsImpl.configuration.name + settingsImpl.setConfiguration(configuration) + } + } + } + }, project) } @TestOnly diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt index ba5e9bedb323..5e1bfb79d0a7 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.kt @@ -50,10 +50,13 @@ enum class RunConfigurationLevel { WORKSPACE, PROJECT, TEMPORARY } -class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(val manager: RunManagerImpl, - private var _configuration: RunConfiguration? = null, - private var isTemplate: Boolean = false, - var level: RunConfigurationLevel = RunConfigurationLevel.WORKSPACE) : Cloneable, RunnerAndConfigurationSettings, Comparable, SerializableScheme { +class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor( + val manager: RunManagerImpl, + private var _configuration: RunConfiguration? = null, + private var isTemplate: Boolean = false, + var level: RunConfigurationLevel = RunConfigurationLevel.WORKSPACE +) : Cloneable, RunnerAndConfigurationSettings, Comparable, SerializableScheme { + @Deprecated("isSingleton parameter removed", level = DeprecationLevel.ERROR) @Suppress("UNUSED_PARAMETER") constructor(manager: RunManagerImpl, configuration: RunConfiguration, isTemplate: Boolean, isSingleton: Boolean) : this(manager, configuration, isTemplate) @@ -115,6 +118,10 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(val manager: override fun getConfiguration() = _configuration ?: UnknownConfigurationType.getInstance().createTemplateConfiguration(manager.project) + fun setConfiguration(configuration: RunConfiguration?) { + _configuration = configuration + } + override fun createFactory(): Factory { return Factory { val configuration = configuration diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index ac01a381c60e..9bbadb38343b 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -468,7 +468,7 @@ - +