FIR IDE: always pass ValidityToken to KtAnalysisSessionComponent
This commit is contained in:
-1
@@ -11,5 +11,4 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
|
||||
abstract class KtAnalysisSessionComponent : ValidityTokenOwner {
|
||||
protected abstract val analysisSession: KtAnalysisSession
|
||||
final override val token: ValidityToken get() = analysisSession.token
|
||||
}
|
||||
+2
-2
@@ -5,13 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
||||
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
|
||||
abstract class KtSymbolProvider : ValidityTokenOwner {
|
||||
abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
|
||||
open fun getSymbol(psi: KtDeclaration): KtSymbol = when (psi) {
|
||||
is KtParameter -> getParameterSymbol(psi)
|
||||
is KtNamedFunction -> getFunctionSymbol(psi)
|
||||
|
||||
+7
-7
@@ -34,14 +34,14 @@ private constructor(
|
||||
|
||||
private val project = element.project
|
||||
|
||||
override val smartCastProvider: KtSmartCastProvider = KtFirSmartcastProvider(this)
|
||||
override val typeProvider: KtTypeProvider = KtFirTypeProvider(this)
|
||||
override val diagnosticProvider: KtDiagnosticProvider = KtFirDiagnosticProvider(this)
|
||||
override val containingDeclarationProvider = KtFirSymbolContainingDeclarationProvider(this)
|
||||
override val callResolver: KtCallResolver = KtFirCallResolver(this)
|
||||
override val scopeProvider by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveState) }
|
||||
override val smartCastProvider: KtSmartCastProvider = KtFirSmartcastProvider(this, token)
|
||||
override val typeProvider: KtTypeProvider = KtFirTypeProvider(this, token)
|
||||
override val diagnosticProvider: KtDiagnosticProvider = KtFirDiagnosticProvider(this, token)
|
||||
override val containingDeclarationProvider = KtFirSymbolContainingDeclarationProvider(this, token)
|
||||
override val callResolver: KtCallResolver = KtFirCallResolver(this, token)
|
||||
override val scopeProvider by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveState, token) }
|
||||
override val symbolProvider: KtSymbolProvider =
|
||||
KtFirSymbolProvider(token, firResolveState.firIdeLibrariesSession.firSymbolProvider, firResolveState, firSymbolBuilder)
|
||||
KtFirSymbolProvider(this, firResolveState.firIdeLibrariesSession.firSymbolProvider, firResolveState, firSymbolBuilder, token)
|
||||
|
||||
|
||||
override fun createContextDependentCopy(): KtAnalysisSession {
|
||||
|
||||
+4
-1
@@ -28,7 +28,10 @@ import org.jetbrains.kotlin.psi.KtBinaryExpression
|
||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
internal class KtFirCallResolver(override val analysisSession: KtFirAnalysisSession) : KtCallResolver(), KtFirAnalysisSessionComponent {
|
||||
internal class KtFirCallResolver(
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : KtCallResolver(), KtFirAnalysisSessionComponent {
|
||||
|
||||
override fun resolveCall(call: KtBinaryExpression): CallInfo? = withValidityAssertion {
|
||||
val firCall = call.getOrBuildFirSafe<FirFunctionCall>(firResolveState) ?: return null
|
||||
|
||||
+3
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.LowLevelFirApiFacade
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartCast
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartcastKind
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtDiagnosticProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtSmartCastProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
@@ -21,7 +22,8 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
internal class KtFirDiagnosticProvider(
|
||||
override val analysisSession: KtFirAnalysisSession
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : KtDiagnosticProvider(), KtFirAnalysisSessionComponent {
|
||||
override fun getDiagnosticsForElement(element: KtElement): Collection<Diagnostic> = withValidityAssertion {
|
||||
LowLevelFirApiFacade.getDiagnosticsFor(element, firResolveState)
|
||||
|
||||
+2
-1
@@ -55,8 +55,9 @@ internal class KtFirScopeProvider(
|
||||
private val builder: KtSymbolByFirBuilder,
|
||||
private val project: Project,
|
||||
firResolveState: FirModuleResolveState,
|
||||
override val token: ValidityToken,
|
||||
) : KtScopeProvider(), ValidityTokenOwner {
|
||||
override val analysisSession: KtAnalysisSession by analysisSession.weakRef(analysisSession)
|
||||
override val analysisSession: KtAnalysisSession by weakRef(analysisSession)
|
||||
private val firResolveState by weakRef(firResolveState)
|
||||
private val firScopeStorage = FirScopeRegistry()
|
||||
|
||||
|
||||
+4
-2
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartCast
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartcastKind
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtSmartCastProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||
@@ -17,8 +18,9 @@ import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
internal class KtFirSmartcastProvider(
|
||||
override val analysisSession: KtFirAnalysisSession
|
||||
) : KtSmartCastProvider(), KtFirAnalysisSessionComponent {
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : KtSmartCastProvider(), KtFirAnalysisSessionComponent {
|
||||
override fun getSmartCastedToTypes(expression: KtExpression): Collection<KtType> = withValidityAssertion {
|
||||
// TODO filter out not used smartcasts
|
||||
expression.getOrBuildFirSafe<FirExpressionWithSmartcast>(analysisSession.firResolveState)
|
||||
|
||||
+3
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.components
|
||||
|
||||
import com.intellij.psi.util.parentOfType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtSymbolContainingDeclarationProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
@@ -15,7 +16,8 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
|
||||
internal class KtFirSymbolContainingDeclarationProvider(
|
||||
override val analysisSession: KtFirAnalysisSession
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : KtSymbolContainingDeclarationProvider(), KtFirAnalysisSessionComponent {
|
||||
override fun getContainingDeclaration(symbol: KtSymbolWithKind): KtSymbolWithKind? {
|
||||
if (symbol is KtPackageSymbol) return null
|
||||
|
||||
+3
-1
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType
|
||||
import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartCast
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ImplicitReceiverSmartcastKind
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtSmartCastProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
@@ -23,7 +24,8 @@ import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
internal class KtFirTypeProvider(
|
||||
override val analysisSession: KtFirAnalysisSession
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : KtTypeProvider(), KtFirAnalysisSessionComponent {
|
||||
override fun getReturnTypeForKtDeclaration(declaration: KtDeclaration): KtType = withValidityAssertion {
|
||||
val firDeclaration = declaration.getOrBuildFirOfType<FirCallableDeclaration<*>>(firResolveState)
|
||||
|
||||
+4
-2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||
@@ -21,10 +22,11 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
|
||||
internal class KtFirSymbolProvider(
|
||||
override val token: ValidityToken,
|
||||
override val analysisSession: KtAnalysisSession,
|
||||
firSymbolProvider: FirSymbolProvider,
|
||||
private val resolveState: FirModuleResolveState,
|
||||
private val firSymbolBuilder: KtSymbolByFirBuilder
|
||||
private val firSymbolBuilder: KtSymbolByFirBuilder,
|
||||
override val token: ValidityToken,
|
||||
) : KtSymbolProvider(), ValidityTokenOwner {
|
||||
private val firSymbolProvider by weakRef(firSymbolProvider)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user