diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/DefaultScriptingSupport.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/DefaultScriptingSupport.kt index a400e249b9c..6c4ce711c5d 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/DefaultScriptingSupport.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/DefaultScriptingSupport.kt @@ -522,7 +522,7 @@ abstract class DefaultScriptingSupportBase(val manager: CompositeScriptConfigura // own builder for saving to storage val rootsStorage = ScriptClassRootsStorage.getInstance(project) - val ownBuilder = ScriptClassRootsBuilder.fromStorage(rootsStorage) + val ownBuilder = ScriptClassRootsBuilder.fromStorage(project, rootsStorage) cache.allApplied().forEach { (vFile, configuration) -> ownBuilder.add(vFile, configuration) } ownBuilder.toStorage(rootsStorage) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt index 5cc75445761..5b458209f05 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt @@ -18,7 +18,7 @@ import com.intellij.util.xmlb.XmlSerializerUtil name = "ScriptClassRootsStorage", storages = [Storage(StoragePathMacros.CACHE_FILE)] ) -class ScriptClassRootsStorage(val project: Project) : PersistentStateComponent { +class ScriptClassRootsStorage : PersistentStateComponent { var classpath: Set = hashSetOf() var sources: Set = hashSetOf() var sdks: Set = hashSetOf() diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsBuilder.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsBuilder.kt index 370898d6c25..27ad33c8533 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsBuilder.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsBuilder.kt @@ -73,8 +73,8 @@ class ScriptClassRootsBuilder( } companion object { - fun fromStorage(storage: ScriptClassRootsStorage) = ScriptClassRootsBuilder( - storage.project, + fun fromStorage(project: Project, storage: ScriptClassRootsStorage) = ScriptClassRootsBuilder( + project, storage.classpath.toMutableSet(), storage.sources.toMutableSet(), ).also { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt index 0813cab8cce..26b256d9235 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ucache/ScriptClassRootsUpdater.kt @@ -133,11 +133,12 @@ class ScriptClassRootsUpdater( private val syncLock = ReentrantLock() private var scheduledUpdate: ProgressIndicator? = null + @Suppress("IncorrectParentDisposable") @Synchronized private fun ensureUpdateScheduled() { scheduledUpdate?.cancel() runReadAction { - if (project.isDisposed && !Disposer.isDisposing(project)) { + if (!Disposer.isDisposing(project)) { scheduledUpdate = BackgroundTaskUtil.executeOnPooledThread(project) { doUpdate() } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt index e63bf8c67ca..2621dfd4e77 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt @@ -340,7 +340,7 @@ class GradleBuildRootsManager(val project: Project) : ScriptingSupport() { private fun add(newRoot: GradleBuildRoot.Linked) { val old = roots.add(newRoot) - if (old is GradleBuildRoot.Imported) removeData(old.pathPrefix) + if (old is GradleBuildRoot.Imported && newRoot !is GradleBuildRoot.Imported) removeData(old.pathPrefix) if (old is GradleBuildRoot.Imported || newRoot is GradleBuildRoot.Imported) { updater.invalidateAndCommit() }