diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt index f84c6c63315..766b73e3574 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.idea.core.script.configuration +import com.intellij.ProjectTopics import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk +import com.intellij.openapi.roots.ModuleRootEvent +import com.intellij.openapi.roots.ModuleRootListener import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElementFinder import com.intellij.psi.PsiFile @@ -207,6 +210,15 @@ internal abstract class AbstractScriptConfigurationManager( return classpathRoots.hasNotCachedRoots(configuration) } + init { + val connection = project.messageBus.connect() + connection.subscribe(ProjectTopics.PROJECT_ROOTS, object : ModuleRootListener { + override fun rootsChanged(event: ModuleRootEvent) { + clearClassRootsCaches() + } + }) + } + /** * Clear configuration caches * Start re-highlighting for opened scripts @@ -261,11 +273,11 @@ internal abstract class AbstractScriptConfigurationManager( } } - private fun newClassRootsCache() = object : ScriptClassRootsCache(project) { - override val all = cache.allApplied() - override fun getConfiguration(file: VirtualFile) = - this@AbstractScriptConfigurationManager.getConfiguration(file) - } + private fun newClassRootsCache() = + object : ScriptClassRootsCache(project, cache.allApplied()) { + override fun getConfiguration(file: VirtualFile) = + this@AbstractScriptConfigurationManager.getConfiguration(file) + } private fun clearClassRootsCaches() { debug { "class roots caches cleared" } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsCache.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsCache.kt index 905305f72e0..535a2e44d4d 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsCache.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsCache.kt @@ -20,8 +20,10 @@ import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper -internal abstract class ScriptClassRootsCache(private val project: Project) { - protected abstract val all: Collection> +internal abstract class ScriptClassRootsCache( + private val project: Project, + val all: Collection> +) { protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper? private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {