[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
This commit is contained in:
committed by
Space Team
parent
2ba42b8677
commit
9c3fa5e878
+2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user