Allow dynamic load/unload for <configurationType>

GitOrigin-RevId: 21521546551d00dfbfaf8684abb81a4ccc7bbd8e
This commit is contained in:
Dmitry Jemerov
2019-10-08 18:02:14 +00:00
committed by intellij-monorepo-bot
parent e162303586
commit ecfb5a3dfd
3 changed files with 33 additions and 5 deletions
@@ -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<ConfigurationType> {
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
@@ -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<Any>, 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<Any>, 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<RunnerAndConfigurationSettings> {
return Factory {
val configuration = configuration
@@ -468,7 +468,7 @@
<with attribute="implementationClass" implements="com.intellij.psi.impl.cache.CommentTokenSetProvider"/>
</extensionPoint>
<extensionPoint name="configurationType" interface="com.intellij.execution.configurations.ConfigurationType"/>
<extensionPoint name="configurationType" interface="com.intellij.execution.configurations.ConfigurationType" dynamic="true"/>
<extensionPoint name="runConfigurationTemplateProvider" interface="com.intellij.execution.impl.RunConfigurationTemplateProvider" area="IDEA_PROJECT"/>
<extensionPoint name="runConfigurationsSettings"