From 4f3f4dd0259abbcfe259ca84fac22dff5b1d6322 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Wed, 1 Aug 2018 15:12:05 +0300 Subject: [PATCH] ScriptDependenciesLoader: Fix calling notifyRootsChanged in write-unsafe context (EA-123239) --- .../dependencies/ScriptDependenciesLoader.kt | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt index 5b50dd66b4e..545affa5aaa 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.core.script.dependencies import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.TransactionGuard import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.Task @@ -13,9 +14,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ex.ProjectRootManagerEx import com.intellij.openapi.util.EmptyRunnable import com.intellij.openapi.vfs.VirtualFile -import kotlinx.coroutines.experimental.launch import org.jetbrains.kotlin.idea.core.script.* -import org.jetbrains.kotlin.idea.core.util.EDT import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.script.* import java.util.concurrent.ConcurrentHashMap @@ -110,22 +109,13 @@ abstract class ScriptDependenciesLoader( protected fun notifyRootsChanged() { if (!shouldNotifyRootsChanged) return - val rootsChangesRunnable = { + TransactionGuard.submitTransaction(project, Runnable { runWriteAction { if (project.isDisposed) return@runWriteAction ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true) ScriptDependenciesModificationTracker.getInstance(project).incModificationCount() } - } - - val application = ApplicationManager.getApplication() - if (application.isUnitTestMode) { - rootsChangesRunnable() - } else { - launch(EDT(project)) { - rootsChangesRunnable() - } - } + }) } }