Add way to create the FirAnalysisSession with custom token

This way should be used only for old FE wrappers.
It is important that Fir session with custom token should be cached,
because otherwise session with incorrect validity token could be
returned from cache inside analyze call
This commit is contained in:
Stanislav Erokhin
2021-01-14 15:42:39 +01:00
committed by Ilya Kirillov
parent 29bebae37d
commit 8ffb822c3c
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.ReadActionConfinementValidityToken import org.jetbrains.kotlin.idea.frontend.api.ReadActionConfinementValidityToken
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.assertIsValidAndAccessible
import org.jetbrains.kotlin.idea.frontend.api.fir.components.* import org.jetbrains.kotlin.idea.frontend.api.fir.components.*
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbolProvider import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbolProvider
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.EnclosingDeclarationContext import org.jetbrains.kotlin.idea.frontend.api.fir.utils.EnclosingDeclarationContext
@@ -90,9 +89,20 @@ private constructor(
} }
@Deprecated("Please use org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProviderKt.analyze") @Deprecated("Please use org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSessionProviderKt.analyze")
internal fun createAnalysisSessionByResolveState(firResolveState: FirModuleResolveState): KtFirAnalysisSession { internal fun createAnalysisSessionByResolveState(firResolveState: FirModuleResolveState): KtFirAnalysisSession =
@OptIn(InvalidWayOfUsingAnalysisSession::class)
createAnalysisSessionByResolveStateWithCustomValidityToken(
firResolveState,
ReadActionConfinementValidityToken(firResolveState.project)
)
@InvalidWayOfUsingAnalysisSession
@Deprecated("This method should be used ONLY for old FE wrappers")
internal fun createAnalysisSessionByResolveStateWithCustomValidityToken(
firResolveState: FirModuleResolveState,
token: ValidityToken
): KtFirAnalysisSession {
val project = firResolveState.project val project = firResolveState.project
val token = ReadActionConfinementValidityToken(project)
val firSymbolBuilder = KtSymbolByFirBuilder( val firSymbolBuilder = KtSymbolByFirBuilder(
firResolveState, firResolveState,
project, project,