[LL API] Use modification tracker right from the 'LLFirSession'
This commit is contained in:
+1
-5
@@ -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.lifetime.KtLifetimeTokenFactory
|
||||||
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
|
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.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.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||||
@@ -47,12 +46,9 @@ class KtFirAnalysisSessionProvider(project: Project) : KtAnalysisSessionProvider
|
|||||||
val firResolveSession = useSiteKtModule.getFirResolveSession(project)
|
val firResolveSession = useSiteKtModule.getFirResolveSession(project)
|
||||||
val validityToken = factory.create(project)
|
val validityToken = factory.create(project)
|
||||||
|
|
||||||
val validityStamp = FirSessionValidityStamp(firResolveSession.useSiteFirSession)
|
|
||||||
require(validityStamp.isValid) { "Got an invalid session for module $useSiteKtModule" }
|
|
||||||
|
|
||||||
CachedValueProvider.Result(
|
CachedValueProvider.Result(
|
||||||
KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, validityToken),
|
KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, validityToken),
|
||||||
validityStamp,
|
firResolveSession.useSiteFirSession.modificationTracker,
|
||||||
ProjectRootModificationTracker.getInstance(project),
|
ProjectRootModificationTracker.getInstance(project),
|
||||||
project.createProjectWideOutOfBlockModificationTracker()
|
project.createProjectWideOutOfBlockModificationTracker()
|
||||||
)
|
)
|
||||||
|
|||||||
-21
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user