Invoke in CompilerSettingsListeners in invokeLater

script templates that are loaded from compiler settings are subscribed on this topic.
When ScriptTemplatesFromCompilerSettingsProvider invokes KotlinCompilerSettings.getInstance, deadlock may happen if those settings aren't initialized yet.

^KT-25373
This commit is contained in:
Natalia Selezneva
2019-10-01 15:44:29 +03:00
parent 217f681b6e
commit fac49df177
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.compiler.configuration package org.jetbrains.kotlin.idea.compiler.configuration
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.PersistentStateComponent import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Comparing import com.intellij.openapi.util.Comparing
@@ -76,7 +77,9 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
validateNewSettings(value) validateNewSettings(value)
_settings = value _settings = value
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value) ApplicationManager.getApplication().invokeLater {
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value)
}
} }
fun update(changer: T.() -> Unit) { fun update(changer: T.() -> Unit) {
@@ -111,7 +114,9 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
XmlSerializer.deserializeInto(this, state) XmlSerializer.deserializeInto(this, state)
} }
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings) ApplicationManager.getApplication().invokeLater {
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(settings)
}
} }
public override fun clone(): Any = super.clone() public override fun clone(): Any = super.clone()