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