FIR: simplify companion scope building for implicit dispatch receiver
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user