ScriptDependenciesLoader: Fix calling notifyRootsChanged in write-unsafe context (EA-123239)
This commit is contained in:
+3
-13
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.core.script.dependencies
|
package org.jetbrains.kotlin.idea.core.script.dependencies
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.application.TransactionGuard
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.progress.ProgressIndicator
|
import com.intellij.openapi.progress.ProgressIndicator
|
||||||
import com.intellij.openapi.progress.Task
|
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.roots.ex.ProjectRootManagerEx
|
||||||
import com.intellij.openapi.util.EmptyRunnable
|
import com.intellij.openapi.util.EmptyRunnable
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import kotlinx.coroutines.experimental.launch
|
|
||||||
import org.jetbrains.kotlin.idea.core.script.*
|
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.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.script.*
|
import org.jetbrains.kotlin.script.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
@@ -110,22 +109,13 @@ abstract class ScriptDependenciesLoader(
|
|||||||
protected fun notifyRootsChanged() {
|
protected fun notifyRootsChanged() {
|
||||||
if (!shouldNotifyRootsChanged) return
|
if (!shouldNotifyRootsChanged) return
|
||||||
|
|
||||||
val rootsChangesRunnable = {
|
TransactionGuard.submitTransaction(project, Runnable {
|
||||||
runWriteAction {
|
runWriteAction {
|
||||||
if (project.isDisposed) return@runWriteAction
|
if (project.isDisposed) return@runWriteAction
|
||||||
|
|
||||||
ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true)
|
ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true)
|
||||||
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
|
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
|
||||||
val application = ApplicationManager.getApplication()
|
|
||||||
if (application.isUnitTestMode) {
|
|
||||||
rootsChangesRunnable()
|
|
||||||
} else {
|
|
||||||
launch(EDT(project)) {
|
|
||||||
rootsChangesRunnable()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user