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.declarations.FirRegularClass
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.impl.FirThisReceiverExpressionImpl
import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference
import org.jetbrains.kotlin.fir.renderWithType
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
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.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -90,18 +86,11 @@ abstract class ImplicitReceiverValue<S : AbstractFirBasedSymbol<*>>(
class ImplicitDispatchReceiverValue(
boundSymbol: FirClassSymbol<*>,
type: ConeKotlinType,
symbolProvider: FirSymbolProvider,
useSiteSession: FirSession,
scopeSession: ScopeSession
) : ImplicitReceiverValue<FirClassSymbol<*>>(boundSymbol, type, useSiteSession, scopeSession) {
val implicitCompanionScope: FirScope? = (boundSymbol.fir as? FirRegularClass)?.companionObject?.let { companionObject ->
val companionId = companionObject.classId
if (companionId.isLocal) {
companionObject.buildDefaultUseSiteMemberScope(useSiteSession, scopeSession)
} else {
symbolProvider.getClassUseSiteMemberScope(companionId, useSiteSession, scopeSession)
}
}
val implicitCompanionScope: FirScope? =
(boundSymbol.fir as? FirRegularClass)?.companionObject?.buildUseSiteMemberScope(useSiteSession, scopeSession)
}
class ImplicitExtensionReceiverValue(
@@ -355,7 +355,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
): T {
val implicitReceiverValue = when (owner) {
is FirClass<*> -> {
ImplicitDispatchReceiverValue(owner.symbol, type, symbolProvider, session, scopeSession)
ImplicitDispatchReceiverValue(owner.symbol, type, session, scopeSession)
}
is FirFunction<*> -> {
ImplicitExtensionReceiverValue(owner.symbol, type, session, scopeSession)