Fix deadlock in ScriptTemplatesFromCompilerSettingsProvider
^KT-25373 Fixed
This commit is contained in:
+10
-3
@@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
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.components.StoragePathMacros.PROJECT_CONFIG_DIR
|
import com.intellij.openapi.components.StoragePathMacros.PROJECT_CONFIG_DIR
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.util.messages.Topic
|
|
||||||
import com.intellij.util.ReflectionUtil
|
import com.intellij.util.ReflectionUtil
|
||||||
|
import com.intellij.util.messages.Topic
|
||||||
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters
|
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters
|
||||||
import com.intellij.util.xmlb.XmlSerializer
|
import com.intellij.util.xmlb.XmlSerializer
|
||||||
import org.jdom.Element
|
import org.jdom.Element
|
||||||
@@ -40,7 +41,10 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
|
|||||||
set(value) {
|
set(value) {
|
||||||
validateNewSettings(value)
|
validateNewSettings(value)
|
||||||
_settings = 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) {
|
fun update(changer: T.() -> Unit) {
|
||||||
@@ -73,7 +77,10 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
|
|||||||
}
|
}
|
||||||
XmlSerializer.deserializeInto(this, state)
|
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()
|
public override fun clone(): Any = super.clone()
|
||||||
|
|||||||
+9
-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.util.messages.Topic
|
import com.intellij.util.messages.Topic
|
||||||
@@ -38,7 +39,10 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
|
|||||||
set(value) {
|
set(value) {
|
||||||
validateNewSettings(value)
|
validateNewSettings(value)
|
||||||
_settings = 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) {
|
fun update(changer: T.() -> Unit) {
|
||||||
@@ -71,7 +75,10 @@ abstract class BaseKotlinCompilerSettings<T : Freezable> protected constructor(p
|
|||||||
}
|
}
|
||||||
XmlSerializer.deserializeInto(this, state)
|
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()
|
public override fun clone(): Any = super.clone()
|
||||||
|
|||||||
@@ -26,7 +26,11 @@ import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
|
|||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class ScriptTemplatesFromCompilerSettingsProvider(private val project: Project) : ScriptDefinitionContributor {
|
class ScriptTemplatesFromCompilerSettingsProvider(
|
||||||
|
private val project: Project,
|
||||||
|
private val compilerSettings: KotlinCompilerSettings
|
||||||
|
) : ScriptDefinitionContributor {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
project.messageBus.connect().subscribe(KotlinCompilerSettingsListener.TOPIC, object : KotlinCompilerSettingsListener {
|
project.messageBus.connect().subscribe(KotlinCompilerSettingsListener.TOPIC, object : KotlinCompilerSettingsListener {
|
||||||
override fun <T> settingsChanged(newSettings: T) {
|
override fun <T> settingsChanged(newSettings: T) {
|
||||||
@@ -38,7 +42,7 @@ class ScriptTemplatesFromCompilerSettingsProvider(private val project: Project)
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getDefinitions(): List<KotlinScriptDefinition> {
|
override fun getDefinitions(): List<KotlinScriptDefinition> {
|
||||||
val kotlinSettings = KotlinCompilerSettings.getInstance(project).settings
|
val kotlinSettings = compilerSettings.settings
|
||||||
return if (kotlinSettings.scriptTemplates.isBlank()) emptyList()
|
return if (kotlinSettings.scriptTemplates.isBlank()) emptyList()
|
||||||
else loadDefinitionsFromTemplates(
|
else loadDefinitionsFromTemplates(
|
||||||
templateClassNames = kotlinSettings.scriptTemplates.split(',', ' '),
|
templateClassNames = kotlinSettings.scriptTemplates.split(',', ' '),
|
||||||
|
|||||||
Reference in New Issue
Block a user