diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt index 0aa5abaf0d8..a14d100e9ca 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt @@ -19,6 +19,9 @@ import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl interface ReceiverValue { val type: ConeKotlinType + + fun scope(useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? = + type.scope(useSiteSession, scopeSession) } class ClassDispatchReceiverValue(val klassSymbol: FirClassSymbol) : ReceiverValue { @@ -44,6 +47,8 @@ abstract class ImplicitReceiverValue( scopeSession: ScopeSession ) : ReceiverValue { val implicitScope: FirScope? = type.scope(useSiteSession, scopeSession) + + override fun scope(useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? = implicitScope } class ImplicitDispatchReceiverValue( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt index 7535c2d9b50..c251216294a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.scope import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.FirScope @@ -101,7 +100,7 @@ class MemberScopeTowerLevel( ): ProcessorAction { if (implicitExtensionReceiver != null && explicitExtensionReceiver != null) return ProcessorAction.NEXT val extensionReceiver = implicitExtensionReceiver ?: explicitExtensionReceiver - val scope = dispatchReceiver.type.scope(session, scopeSession) ?: return ProcessorAction.NEXT + val scope = dispatchReceiver.scope(session, scopeSession) ?: return ProcessorAction.NEXT if (scope.processScopeMembers { candidate -> if (candidate is FirCallableSymbol<*> && candidate.hasConsistentExtensionReceiver(extensionReceiver)) { // NB: we do not check dispatchReceiverValue != null here,