ScriptClassRootsCache: load configuration if it is not cached
This commit is contained in:
+7
-1
@@ -254,12 +254,18 @@ internal abstract class AbstractScriptConfigurationManager(
|
|||||||
val value2 = _classpathRoots
|
val value2 = _classpathRoots
|
||||||
if (value2 != null) return value2
|
if (value2 != null) return value2
|
||||||
|
|
||||||
val value3 = ScriptClassRootsCache(project, cache)
|
val value3 = newClassRootsCache()
|
||||||
_classpathRoots = value3
|
_classpathRoots = value3
|
||||||
return 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() {
|
private fun clearClassRootsCaches() {
|
||||||
debug { "class roots caches cleared" }
|
debug { "class roots caches cleared" }
|
||||||
|
|
||||||
|
|||||||
+3
-7
@@ -17,16 +17,12 @@ import com.intellij.psi.search.NonClasspathDirectoriesScope
|
|||||||
import com.intellij.util.containers.ConcurrentFactoryMap
|
import com.intellij.util.containers.ConcurrentFactoryMap
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
|
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
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.idea.core.script.debug
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||||
|
|
||||||
internal class ScriptClassRootsCache(
|
internal abstract class ScriptClassRootsCache(private val project: Project) {
|
||||||
private val project: Project,
|
protected abstract val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||||
private val cache: ScriptConfigurationCache
|
protected abstract fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper?
|
||||||
) {
|
|
||||||
private val all: Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>> get() = cache.allApplied()
|
|
||||||
private fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper? = cache[file]?.applied?.configuration
|
|
||||||
|
|
||||||
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
|
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
|
||||||
// workaround for mismatched gradle wrapper and plugin version
|
// workaround for mismatched gradle wrapper and plugin version
|
||||||
|
|||||||
Reference in New Issue
Block a user