ScriptDependenciesLoader: Fix calling notifyRootsChanged in write-unsafe context (EA-123239)

This commit is contained in:
Sergey Rostov
2018-08-01 15:12:05 +03:00
parent 0c8b231fde
commit 4f3f4dd025
@@ -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()
}
}
})
}
}