From 6759263ae9ad3b0a5ec6d3c598f667490ea484e7 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 21 Jul 2022 22:43:54 +0200 Subject: [PATCH] [Analysis API FIR] fix getClassOrObjectSymbol for classes actualized by typealias --- .../analysis/api/fir/KtFirAnalysisSession.kt | 2 +- .../api/fir/symbols/KtFirSymbolProvider.kt | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt index 8d511064bc7..112dec077eb 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt @@ -63,7 +63,7 @@ private constructor( override val scopeProviderImpl by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveSession) } override val symbolProviderImpl = - KtFirSymbolProvider(this, firResolveSession.useSiteFirSession.symbolProvider, firResolveSession, firSymbolBuilder) + KtFirSymbolProvider(this, firResolveSession.useSiteFirSession.symbolProvider) override val completionCandidateCheckerImpl = KtFirCompletionCandidateChecker(this, token) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt index 03a822a93c1..0bd379b368e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt @@ -5,13 +5,15 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols -import org.jetbrains.kotlin.analysis.api.KtAnalysisSession +import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder +import org.jetbrains.kotlin.analysis.api.fir.components.KtFirAnalysisSessionComponent import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbolOfType import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin +import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.symbols.impl.* @@ -21,11 +23,9 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* internal class KtFirSymbolProvider( - override val analysisSession: KtAnalysisSession, + override val analysisSession: KtFirAnalysisSession, private val firSymbolProvider: FirSymbolProvider, - private val firResolveSession: LLFirResolveSession, - private val firSymbolBuilder: KtSymbolByFirBuilder, -) : KtSymbolProvider() { +) : KtSymbolProvider(), KtFirAnalysisSessionComponent { override fun getParameterSymbol(psi: KtParameter): KtVariableLikeSymbol { return when { @@ -114,7 +114,10 @@ internal class KtFirSymbolProvider( } override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol { - return firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(psi.resolveToFirSymbolOfType>(firResolveSession)) + val firClass = psi.resolveToFirSymbolOfType>(firResolveSession) + .fullyExpandedClass(firResolveSession.useSiteFirSession) + ?: error("Not-expended type-alias") + return firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(firClass) } override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol? {