FIR: simplify companion scope building for implicit dispatch receiver

This commit is contained in:
Mikhail Glukhikh
2019-10-29 12:55:37 +03:00
parent 79e584519f
commit 0708f574fc
2 changed files with 4 additions and 15 deletions
@@ -8,15 +8,11 @@ package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.classId
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl
import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference
import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.renderWithType
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteMemberScope
import org.jetbrains.kotlin.fir.resolve.scope
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -90,18 +86,11 @@ abstract class ImplicitReceiverValue<S : AbstractFirBasedSymbol<*>>(
class ImplicitDispatchReceiverValue( class ImplicitDispatchReceiverValue(
boundSymbol: FirClassSymbol<*>, boundSymbol: FirClassSymbol<*>,
type: ConeKotlinType, type: ConeKotlinType,
symbolProvider: FirSymbolProvider,
useSiteSession: FirSession, useSiteSession: FirSession,
scopeSession: ScopeSession scopeSession: ScopeSession
) : ImplicitReceiverValue<FirClassSymbol<*>>(boundSymbol, type, useSiteSession, scopeSession) { ) : ImplicitReceiverValue<FirClassSymbol<*>>(boundSymbol, type, useSiteSession, scopeSession) {
val implicitCompanionScope: FirScope? = (boundSymbol.fir as? FirRegularClass)?.companionObject?.let { companionObject -> val implicitCompanionScope: FirScope? =
val companionId = companionObject.classId (boundSymbol.fir as? FirRegularClass)?.companionObject?.buildUseSiteMemberScope(useSiteSession, scopeSession)
if (companionId.isLocal) {
companionObject.buildDefaultUseSiteMemberScope(useSiteSession, scopeSession)
} else {
symbolProvider.getClassUseSiteMemberScope(companionId, useSiteSession, scopeSession)
}
}
} }
class ImplicitExtensionReceiverValue( class ImplicitExtensionReceiverValue(
@@ -355,7 +355,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
): T { ): T {
val implicitReceiverValue = when (owner) { val implicitReceiverValue = when (owner) {
is FirClass<*> -> { is FirClass<*> -> {
ImplicitDispatchReceiverValue(owner.symbol, type, symbolProvider, session, scopeSession) ImplicitDispatchReceiverValue(owner.symbol, type, session, scopeSession)
} }
is FirFunction<*> -> { is FirFunction<*> -> {
ImplicitExtensionReceiverValue(owner.symbol, type, session, scopeSession) ImplicitExtensionReceiverValue(owner.symbol, type, session, scopeSession)