From 93887e1d7a616708d12720f057d251937454ca05 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 5 Jun 2023 12:27:33 +0200 Subject: [PATCH] [LL] store builtin session as cached value to invalidate builtins on stdlib update. It is required after making builtins use stubs of stdlib. --- .../project/structure/LLFirBuiltinsSessionFactory.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt index 06f863646f9..9add1881ca5 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirBuiltinsSessionFactory.kt @@ -9,6 +9,9 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.DelegatingGlobalSearchScope +import com.intellij.psi.util.CachedValue +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirBuiltinsAndCloneableSessionProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirBuiltinsAndCloneableSession @@ -53,7 +56,7 @@ class LLFirBuiltinsSessionFactory(private val project: Project) { private val builtinsModules = ConcurrentHashMap() - private val builtinsAndCloneableSessions = ConcurrentHashMap() + private val builtinsAndCloneableSessions = ConcurrentHashMap>() /** * Returns the [platform]'s [KtBuiltinsModule]. [getBuiltinsModule] should be used instead of [getBuiltinsSession] when a @@ -64,7 +67,12 @@ class LLFirBuiltinsSessionFactory(private val project: Project) { builtinsModules.getOrPut(platform) { KtBuiltinsModule(platform, platform.getAnalyzerServices(), project) } fun getBuiltinsSession(platform: TargetPlatform): LLFirBuiltinsAndCloneableSession = - builtinsAndCloneableSessions.getOrPut(platform) { createBuiltinsAndCloneableSession(platform) } + builtinsAndCloneableSessions.getOrPut(platform) { + CachedValuesManager.getManager(project).createCachedValue { + val session = createBuiltinsAndCloneableSession(platform) + CachedValueProvider.Result(session, session.modificationTracker) + } + }.value @TestOnly fun clearForTheNextTest() {