IDE script support: cancel coroutines on project disposal
This commit is contained in:
@@ -72,7 +72,7 @@ internal class ScriptDependenciesCache(private val project: Project) {
|
||||
private fun updateHighlighting(file: VirtualFile?) {
|
||||
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
|
||||
|
||||
launch(EDT) {
|
||||
launch(EDT(project)) {
|
||||
if (file != null) {
|
||||
file.let { PsiManager.getInstance(project).findFile(it) }?.let { psiFile ->
|
||||
DaemonCodeAnalyzer.getInstance(project).restart(psiFile)
|
||||
|
||||
+6
-2
@@ -35,6 +35,8 @@ import kotlinx.coroutines.experimental.Job
|
||||
import kotlinx.coroutines.experimental.asCoroutineDispatcher
|
||||
import kotlinx.coroutines.experimental.launch
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.idea.core.util.EDT
|
||||
import org.jetbrains.kotlin.idea.core.util.cancelOnDisposal
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
|
||||
import org.jetbrains.kotlin.script.*
|
||||
@@ -166,7 +168,7 @@ internal class ScriptDependenciesUpdater(
|
||||
currentTimeStamp: TimeStamp,
|
||||
scriptDef: KotlinScriptDefinition,
|
||||
doResolve: suspend () -> DependenciesResolver.ResolveResult
|
||||
) = launch(dispatcher) {
|
||||
) = launch(dispatcher + project.cancelOnDisposal) {
|
||||
val result = try {
|
||||
doResolve()
|
||||
}
|
||||
@@ -231,7 +233,9 @@ internal class ScriptDependenciesUpdater(
|
||||
rootsChangesRunnable.invoke()
|
||||
}
|
||||
else {
|
||||
application.invokeLater(rootsChangesRunnable, ModalityState.defaultModalityState())
|
||||
launch(EDT(project)) {
|
||||
rootsChangesRunnable()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user