From 9c3fa5e87809102d3ae286408dbc5132099eebca Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Fri, 28 Jul 2023 14:10:29 +0200 Subject: [PATCH] [LL FIR] KT-58257 Restore invalidation of `KtFirAnalysisSession` via the project-wide OOBM tracker - `KtReadActionConfinementLifetimeToken` tracks its validity via the project-wide out-of-block modification tracker. Out-of-block invalidation of some LL FIR session will cause the lifetime tokens of all analysis sessions to become invalid, including unrelated sessions, because of this project-wide tracking. - If `KtFirAnalysisSession`s are only invalidated when their underlying LL FIR session is invalidated, the cache may expose analysis sessions which contain invalid lifetime tokens after out-of-block modification. Even though an analysis session will still be practically valid if its underlying LL FIR session is valid, the lifetime token will *think* that the PSI has changed and throw an "access to invalid token" exception. - Hence, we cannot currently invalidate `KtFirAnalysisSession` granularly and project-wide OOBM tracking needs to be restored. ^KT-60272 --- .../kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt index 723470af918..78b98e185a6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.psi.KtElement import java.util.concurrent.ConcurrentMap import kotlin.reflect.KClass @@ -47,6 +48,7 @@ class KtFirAnalysisSessionProvider(project: Project) : KtAnalysisSessionProvider CachedValueProvider.Result( KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, validityToken), firResolveSession.useSiteFirSession.createValidityTracker(), + project.createProjectWideOutOfBlockModificationTracker(), ) } }.value