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
|
override val currentDefinitions:Sequence<ScriptDefinition>
|
||||||
get() =
|
get() {
|
||||||
(definitions ?: run {
|
val scriptingSettings = kotlinScriptingSettingsSafe() ?: return emptySequence()
|
||||||
|
return (definitions ?: run {
|
||||||
reloadScriptDefinitions()
|
reloadScriptDefinitions()
|
||||||
definitions!!
|
definitions!!
|
||||||
}).asSequence().filter { KotlinScriptingSettings.getInstance(project).isScriptDefinitionEnabled(it) }
|
}).asSequence().filter { scriptingSettings.isScriptDefinitionEnabled(it) }
|
||||||
|
}
|
||||||
|
|
||||||
private fun getSources(): List<ScriptDefinitionsSource> {
|
private fun getSources(): List<ScriptDefinitionsSource> {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@@ -165,6 +167,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
fun reloadScriptDefinitions() = loadScriptDefinitions()
|
fun reloadScriptDefinitions() = loadScriptDefinitions()
|
||||||
|
|
||||||
private fun loadScriptDefinitions() {
|
private fun loadScriptDefinitions() {
|
||||||
|
if (project.isDisposed) return
|
||||||
|
|
||||||
val newDefinitionsBySource = getSources().map { it to it.safeGetDefinitions() }.toMap()
|
val newDefinitionsBySource = getSources().map { it to it.safeGetDefinitions() }.toMap()
|
||||||
|
|
||||||
lock.write {
|
lock.write {
|
||||||
@@ -176,8 +180,9 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun reorderScriptDefinitions() {
|
fun reorderScriptDefinitions() {
|
||||||
|
val scriptingSettings = kotlinScriptingSettingsSafe() ?: return
|
||||||
definitions?.forEach {
|
definitions?.forEach {
|
||||||
val order = KotlinScriptingSettings.getInstance(project).getScriptDefinitionOrder(it)
|
val order = scriptingSettings.getScriptDefinitionOrder(it)
|
||||||
lock.write {
|
lock.write {
|
||||||
it.order = order
|
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 {
|
fun getAllDefinitions(): List<ScriptDefinition> = definitions ?: run {
|
||||||
reloadScriptDefinitions()
|
reloadScriptDefinitions()
|
||||||
definitions!!
|
definitions!!
|
||||||
@@ -211,6 +220,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
|
|
||||||
private fun updateDefinitions() {
|
private fun updateDefinitions() {
|
||||||
assert(lock.isWriteLocked) { "updateDefinitions should only be called under the write lock" }
|
assert(lock.isWriteLocked) { "updateDefinitions should only be called under the write lock" }
|
||||||
|
if (project.isDisposed) return
|
||||||
|
|
||||||
val fileTypeManager = FileTypeManager.getInstance()
|
val fileTypeManager = FileTypeManager.getInstance()
|
||||||
|
|
||||||
@@ -249,7 +259,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
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