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
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Comparing
@@ -76,7 +77,9 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
validateNewSettings(value)
_settings = value
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value)
ApplicationManager.getApplication().invokeLater {
project.syncPublisherWithDisposeCheck(KotlinCompilerSettingsListener.TOPIC).settingsChanged(value)
}
}
fun update(changer: T.() -> Unit) {
@@ -111,7 +114,9 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
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()