From c191373a6b0ccba20e63980f76cce5268af6f2c3 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 18 Aug 2020 15:47:18 +0300 Subject: [PATCH] FIR IDE: always pass ValidityToken to KtAnalysisSessionComponent --- .../api/components/KtAnalysisSessionComponent.kt | 1 - .../idea/frontend/api/symbols/KtSymbolProvider.kt | 4 ++-- .../idea/frontend/api/fir/KtFirAnalysisSession.kt | 14 +++++++------- .../api/fir/components/KtFirCallResolver.kt | 5 ++++- .../api/fir/components/KtFirDiagnosticProvider.kt | 4 +++- .../api/fir/components/KtFirScopeProvider.kt | 3 ++- .../api/fir/components/KtFirSmartcastProvider.kt | 6 ++++-- .../KtFirSymbolContainingDeclarationProvider.kt | 4 +++- .../api/fir/components/KtFirTypeProvider.kt | 4 +++- .../api/fir/symbols/KtFirSymbolProvider.kt | 6 ++++-- 10 files changed, 32 insertions(+), 19 deletions(-) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtAnalysisSessionComponent.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtAnalysisSessionComponent.kt index 07b50d2df6b..a326fa0786b 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtAnalysisSessionComponent.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtAnalysisSessionComponent.kt @@ -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 } \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt index 4d0c1ac403e..de79da6124e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt @@ -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) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt index 35db1429718..a9813117ffe 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt @@ -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 { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt index 5f936f1c9ba..99c26a25c36 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt @@ -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(firResolveState) ?: return null diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirDiagnosticProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirDiagnosticProvider.kt index aff18cbe408..368dbc0a2d1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirDiagnosticProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirDiagnosticProvider.kt @@ -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 = withValidityAssertion { LowLevelFirApiFacade.getDiagnosticsFor(element, firResolveState) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt index d4e20919964..795d08e2fd3 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt @@ -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() diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSmartcastProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSmartcastProvider.kt index 60bc92430a2..efc19f443f9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSmartcastProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSmartcastProvider.kt @@ -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 = withValidityAssertion { // TODO filter out not used smartcasts expression.getOrBuildFirSafe(analysisSession.firResolveState) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt index f83caf0ff0c..2c7e9e29459 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt @@ -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 diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt index 3259e413e75..fae14bf5e53 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt @@ -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>(firResolveState) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt index bf71fd45ceb..5165f91945b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt @@ -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)