[LL API] Use modification tracker right from the 'LLFirSession'

This commit is contained in:
Yan Zhulanow
2023-03-06 18:37:13 +09:00
committed by Space Team
parent 88636c8dbf
commit f0de570b55
2 changed files with 1 additions and 26 deletions
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenFactory
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirSessionValidityStamp
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
@@ -47,12 +46,9 @@ class KtFirAnalysisSessionProvider(project: Project) : KtAnalysisSessionProvider
val firResolveSession = useSiteKtModule.getFirResolveSession(project)
val validityToken = factory.create(project)
val validityStamp = FirSessionValidityStamp(firResolveSession.useSiteFirSession)
require(validityStamp.isValid) { "Got an invalid session for module $useSiteKtModule" }
CachedValueProvider.Result(
KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, validityToken),
validityStamp,
firResolveSession.useSiteFirSession.modificationTracker,
ProjectRootModificationTracker.getInstance(project),
project.createProjectWideOutOfBlockModificationTracker()
)
@@ -1,21 +0,0 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions
import com.intellij.openapi.util.ModificationTracker
import java.lang.ref.WeakReference
class FirSessionValidityStamp(session: LLFirSession) : ModificationTracker {
private val sessionRef = WeakReference(session)
val isValid: Boolean
get() = modificationCount == 0L
override fun getModificationCount(): Long {
val session = sessionRef.get() ?: return 1
return if (session.isValid) 0 else 2
}
}