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
|
package org.jetbrains.kotlin.idea.core.script.configuration
|
||||||
|
|
||||||
|
import com.intellij.ProjectTopics
|
||||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
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.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiElementFinder
|
import com.intellij.psi.PsiElementFinder
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
@@ -207,6 +210,15 @@ internal abstract class AbstractScriptConfigurationManager(
|
|||||||
return classpathRoots.hasNotCachedRoots(configuration)
|
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
|
* Clear configuration caches
|
||||||
* Start re-highlighting for opened scripts
|
* Start re-highlighting for opened scripts
|
||||||
@@ -261,11 +273,11 @@ internal abstract class AbstractScriptConfigurationManager(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun newClassRootsCache() = object : ScriptClassRootsCache(project) {
|
private fun newClassRootsCache() =
|
||||||
override val all = cache.allApplied()
|
object : ScriptClassRootsCache(project, cache.allApplied()) {
|
||||||
override fun getConfiguration(file: VirtualFile) =
|
override fun getConfiguration(file: VirtualFile) =
|
||||||
this@AbstractScriptConfigurationManager.getConfiguration(file)
|
this@AbstractScriptConfigurationManager.getConfiguration(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun clearClassRootsCaches() {
|
private fun clearClassRootsCaches() {
|
||||||
debug { "class roots caches cleared" }
|
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.idea.core.script.debug
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||||
|
|
||||||
internal abstract class ScriptClassRootsCache(private val project: Project) {
|
internal abstract class ScriptClassRootsCache(
|
||||||
protected abstract val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
private val project: Project,
|
||||||
|
val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||||
|
) {
|
||||||
protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper?
|
protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper?
|
||||||
|
|
||||||
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
|
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
|
||||||
|
|||||||
Reference in New Issue
Block a user