Scripting: invalidate caches on roots changes
This commit is contained in:
+17
-5
@@ -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" }
|
||||
|
||||
+4
-2
@@ -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<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||
internal abstract class ScriptClassRootsCache(
|
||||
private val project: Project,
|
||||
val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||
) {
|
||||
protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper?
|
||||
|
||||
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
|
||||
|
||||
Reference in New Issue
Block a user