[Analysis API FIR] fix getClassOrObjectSymbol for classes actualized by typealias

This commit is contained in:
Ilya Kirillov
2022-07-21 22:43:54 +02:00
parent 10dea730b3
commit 6759263ae9
2 changed files with 10 additions and 7 deletions
@@ -63,7 +63,7 @@ private constructor(
override val scopeProviderImpl by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveSession) } override val scopeProviderImpl by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveSession) }
override val symbolProviderImpl = override val symbolProviderImpl =
KtFirSymbolProvider(this, firResolveSession.useSiteFirSession.symbolProvider, firResolveSession, firSymbolBuilder) KtFirSymbolProvider(this, firResolveSession.useSiteFirSession.symbolProvider)
override val completionCandidateCheckerImpl = KtFirCompletionCandidateChecker(this, token) override val completionCandidateCheckerImpl = KtFirCompletionCandidateChecker(this, token)
@@ -5,13 +5,15 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols 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.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.components.KtFirAnalysisSessionComponent
import org.jetbrains.kotlin.analysis.api.symbols.* 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.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile 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.analysis.low.level.api.fir.api.resolveToFirSymbolOfType
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin 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.renderWithType
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -21,11 +23,9 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
internal class KtFirSymbolProvider( internal class KtFirSymbolProvider(
override val analysisSession: KtAnalysisSession, override val analysisSession: KtFirAnalysisSession,
private val firSymbolProvider: FirSymbolProvider, private val firSymbolProvider: FirSymbolProvider,
private val firResolveSession: LLFirResolveSession, ) : KtSymbolProvider(), KtFirAnalysisSessionComponent {
private val firSymbolBuilder: KtSymbolByFirBuilder,
) : KtSymbolProvider() {
override fun getParameterSymbol(psi: KtParameter): KtVariableLikeSymbol { override fun getParameterSymbol(psi: KtParameter): KtVariableLikeSymbol {
return when { return when {
@@ -114,7 +114,10 @@ internal class KtFirSymbolProvider(
} }
override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol { override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol {
return firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(psi.resolveToFirSymbolOfType<FirClassSymbol<*>>(firResolveSession)) val firClass = psi.resolveToFirSymbolOfType<FirClassLikeSymbol<*>>(firResolveSession)
.fullyExpandedClass(firResolveSession.useSiteFirSession)
?: error("Not-expended type-alias")
return firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(firClass)
} }
override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol? { override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol? {