diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt index 11685b2fdc4..8a78f749994 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt @@ -16,11 +16,12 @@ package org.jetbrains.kotlin.idea.compiler.configuration +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.PersistentStateComponent import com.intellij.openapi.components.StoragePathMacros.PROJECT_CONFIG_DIR import com.intellij.openapi.project.Project -import com.intellij.util.messages.Topic import com.intellij.util.ReflectionUtil +import com.intellij.util.messages.Topic import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters import com.intellij.util.xmlb.XmlSerializer import org.jdom.Element @@ -40,7 +41,10 @@ abstract class BaseKotlinCompilerSettings protected constructor(p set(value) { validateNewSettings(value) _settings = value - project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value) + + ApplicationManager.getApplication().invokeLater { + project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value) + } } fun update(changer: T.() -> Unit) { @@ -73,7 +77,10 @@ abstract class BaseKotlinCompilerSettings protected constructor(p } XmlSerializer.deserializeInto(this, state) } - project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings) + + ApplicationManager.getApplication().invokeLater { + project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings) + } } public override fun clone(): Any = super.clone() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt.182 b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt.182 index d84e67cd1a3..bfa5dcc4941 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt.182 +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/BaseKotlinCompilerSettings.kt.182 @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.compiler.configuration +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.PersistentStateComponent import com.intellij.openapi.project.Project import com.intellij.util.messages.Topic @@ -38,7 +39,10 @@ abstract class BaseKotlinCompilerSettings protected constructor(p set(value) { validateNewSettings(value) _settings = value - project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value) + + ApplicationManager.getApplication().invokeLater { + project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value) + } } fun update(changer: T.() -> Unit) { @@ -71,7 +75,10 @@ abstract class BaseKotlinCompilerSettings protected constructor(p } XmlSerializer.deserializeInto(this, state) } - project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings) + + ApplicationManager.getApplication().invokeLater { + project.messageBus.syncPublisher(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings) + } } public override fun clone(): Any = super.clone() diff --git a/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt index 9b673849021..03498b78f2e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt @@ -26,7 +26,11 @@ import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates import org.jetbrains.kotlin.script.KotlinScriptDefinition import java.io.File -class ScriptTemplatesFromCompilerSettingsProvider(private val project: Project) : ScriptDefinitionContributor { +class ScriptTemplatesFromCompilerSettingsProvider( + private val project: Project, + private val compilerSettings: KotlinCompilerSettings +) : ScriptDefinitionContributor { + init { project.messageBus.connect().subscribe(KotlinCompilerSettingsListener.TOPIC, object : KotlinCompilerSettingsListener { override fun settingsChanged(newSettings: T) { @@ -38,7 +42,7 @@ class ScriptTemplatesFromCompilerSettingsProvider(private val project: Project) } override fun getDefinitions(): List { - val kotlinSettings = KotlinCompilerSettings.getInstance(project).settings + val kotlinSettings = compilerSettings.settings return if (kotlinSettings.scriptTemplates.isBlank()) emptyList() else loadDefinitionsFromTemplates( templateClassNames = kotlinSettings.scriptTemplates.split(',', ' '),