IDE script support: cancel coroutines on project disposal

This commit is contained in:
Pavel V. Talanov
2017-07-28 19:35:45 +03:00
parent 7f361c7579
commit 653314e671
2 changed files with 7 additions and 3 deletions
@@ -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)
@@ -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()
}
}
}