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 b15174645fb6..2c0544a69bf8 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.kt @@ -151,6 +151,14 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent } }, streamProvider = schemeManagerProvider, autoSave = false) + private val stringIdToBeforeRunProvider by lazy { + val result = ContainerUtil.newConcurrentMap>() + for (provider in BeforeRunTaskProvider.EXTENSION_POINT_NAME.getExtensions(project)) { + result.put(provider.id.toString(), provider) + } + result + } + init { initializeConfigurationTypes(ConfigurationType.CONFIGURATION_TYPE_EP.extensions) project.messageBus.connect().subscribe(ProjectTopics.PROJECT_ROOTS, object : ModuleRootListener { @@ -705,8 +713,9 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent private fun readStepsBeforeRun(child: Element, settings: RunnerAndConfigurationSettings): List> { var result: MutableList>? = null for (methodElement in child.getChildren(OPTION)) { - val id = getProviderKey(methodElement.getAttributeValue(NAME_ATTR)) - val beforeRunTask = getProvider(id).createTask(settings.configuration) + val key = methodElement.getAttributeValue(NAME_ATTR) + val provider = stringIdToBeforeRunProvider.getOrPut(key) { UnknownBeforeRunTaskProvider(key) } + val beforeRunTask = provider.createTask(settings.configuration) if (beforeRunTask != null) { beforeRunTask.readExternal(methodElement) if (result == null) { @@ -1064,40 +1073,6 @@ class RunManagerImpl(internal val project: Project) : RunManagerEx(), Persistent myDispatcher.multicaster.beforeRunTasksChanged() } - private var myBeforeStepsMap: MutableMap>, BeforeRunTaskProvider<*>>? = null - private var myProviderKeysMap: MutableMap>>? = null - - @Synchronized private fun getProvider(providerId: Key>): BeforeRunTaskProvider<*> { - if (myBeforeStepsMap == null) { - initProviderMaps() - } - return myBeforeStepsMap!!.get(providerId)!! - } - - @Synchronized - private fun getProviderKey(keyString: String): Key> { - if (myProviderKeysMap == null) { - initProviderMaps() - } - - return myProviderKeysMap!!.getOrPut(keyString) { - val provider = UnknownBeforeRunTaskProvider(keyString) - val id = provider.id!! - myBeforeStepsMap!!.put(id, provider) - id - } - } - - private fun initProviderMaps() { - myBeforeStepsMap = LinkedHashMap() - myProviderKeysMap = LinkedHashMap() - for (provider in Extensions.getExtensions(BeforeRunTaskProvider.EXTENSION_POINT_NAME, project)) { - val id = provider.id - myBeforeStepsMap!!.put(id, provider) - myProviderKeysMap!!.put(id.toString(), id) - } - } - override fun removeConfiguration(settings: RunnerAndConfigurationSettings?) { if (settings == null) { return