Handle project disposed in ScriptDefinitionsManager

^EA-237136 Fixed
This commit is contained in:
Vladimir Dolzhenko
2020-09-01 11:13:59 +02:00
committed by Vladimir Dolzhenko
parent 4e3b1f141e
commit 87e70cf690
@@ -142,12 +142,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
}
}
override val currentDefinitions
get() =
(definitions ?: run {
override val currentDefinitions:Sequence<ScriptDefinition>
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<ScriptDefinitionsSource> {
@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<ScriptDefinition> = 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<ScriptDefinitionProvider>() as ScriptDefinitionsManager
fun getInstance(project: Project): ScriptDefinitionsManager =
project.getServiceSafe<ScriptDefinitionProvider>() as ScriptDefinitionsManager
}
}