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:
+7
-2
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user