diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt index 1afa63894a5..4c447d2f3df 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt @@ -142,12 +142,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit } } - override val currentDefinitions - get() = - (definitions ?: run { + override val currentDefinitions:Sequence + get() { + val scriptingSettings = kotlinScriptingSettingsSafe() ?: return emptySequence() + return (definitions ?: run { reloadScriptDefinitions() definitions!! - }).asSequence().filter { KotlinScriptingSettings.getInstance(project).isScriptDefinitionEnabled(it) } + }).asSequence().filter { scriptingSettings.isScriptDefinitionEnabled(it) } + } private fun getSources(): List { @Suppress("DEPRECATION") @@ -165,6 +167,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit fun reloadScriptDefinitions() = loadScriptDefinitions() private fun loadScriptDefinitions() { + if (project.isDisposed) return + val newDefinitionsBySource = getSources().map { it to it.safeGetDefinitions() }.toMap() lock.write { @@ -176,8 +180,9 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit } fun reorderScriptDefinitions() { + val scriptingSettings = kotlinScriptingSettingsSafe() ?: return definitions?.forEach { - val order = KotlinScriptingSettings.getInstance(project).getScriptDefinitionOrder(it) + val order = scriptingSettings.getScriptDefinitionOrder(it) lock.write { it.order = order } @@ -189,6 +194,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit } } + private fun kotlinScriptingSettingsSafe() = runReadAction { + if (!project.isDisposed) KotlinScriptingSettings.getInstance(project) else null + } + fun getAllDefinitions(): List = definitions ?: run { reloadScriptDefinitions() definitions!! @@ -211,6 +220,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit private fun updateDefinitions() { assert(lock.isWriteLocked) { "updateDefinitions should only be called under the write lock" } + if (project.isDisposed) return val fileTypeManager = FileTypeManager.getInstance() @@ -249,7 +259,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit } companion object { - fun getInstance(project: Project): ScriptDefinitionsManager = project.getServiceSafe() as ScriptDefinitionsManager + fun getInstance(project: Project): ScriptDefinitionsManager = + project.getServiceSafe() as ScriptDefinitionsManager } }