ScriptClassRootsCache: load configuration if it is not cached

This commit is contained in:
Sergey Rostov
2019-11-13 10:34:43 +03:00
parent a84e948051
commit b4185c9d47
2 changed files with 10 additions and 8 deletions
@@ -254,12 +254,18 @@ internal abstract class AbstractScriptConfigurationManager(
val value2 = _classpathRoots
if (value2 != null) return value2
val value3 = ScriptClassRootsCache(project, cache)
val value3 = newClassRootsCache()
_classpathRoots = value3
return value3
}
}
private fun newClassRootsCache() = object : ScriptClassRootsCache(project) {
override val all get() = cache.allApplied()
override fun getConfiguration(file: VirtualFile) =
this@AbstractScriptConfigurationManager.getConfiguration(file)
}
private fun clearClassRootsCaches() {
debug { "class roots caches cleared" }
@@ -17,16 +17,12 @@ import com.intellij.psi.search.NonClasspathDirectoriesScope
import com.intellij.util.containers.ConcurrentFactoryMap
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCache
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
internal class ScriptClassRootsCache(
private val project: Project,
private val cache: ScriptConfigurationCache
) {
private val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>> get() = cache.allApplied()
private fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper? = cache[file]?.applied?.configuration
internal abstract class ScriptClassRootsCache(private val project: Project) {
protected abstract val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper?
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
// workaround for mismatched gradle wrapper and plugin version