Handle project disposed in ScriptDefinitionsManager
^EA-237136 Fixed
This commit is contained in:
committed by
Vladimir Dolzhenko
parent
4e3b1f141e
commit
87e70cf690
+17
-6
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user