diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallResolver.kt index d8bef0990c5..a27bfb811e9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallResolver.kt @@ -65,7 +65,7 @@ class CallResolver( for (scope in localScopes) { towerDataConsumer.consume( TowerDataKind.TOWER_LEVEL, - ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue), + ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue), group++ ) } @@ -84,7 +84,7 @@ class CallResolver( // } towerDataConsumer.consume( TowerDataKind.TOWER_LEVEL, - ScopeTowerLevel(session, implicitScope, implicitExtensionReceiver = implicitReceiverValue), + ScopeTowerLevel(session, components, implicitScope, implicitExtensionReceiver = implicitReceiverValue), group++ ) } @@ -98,7 +98,7 @@ class CallResolver( // } towerDataConsumer.consume( TowerDataKind.TOWER_LEVEL, - ScopeTowerLevel(session, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue), + ScopeTowerLevel(session, components, implicitCompanionScope, implicitExtensionReceiver = implicitReceiverValue), group++ ) } @@ -138,7 +138,7 @@ class CallResolver( for (scope in topLevelScopes) { towerDataConsumer.consume( TowerDataKind.TOWER_LEVEL, - ScopeTowerLevel(session, scope, implicitExtensionReceiver = implicitReceiverValue), + ScopeTowerLevel(session, components, scope, implicitExtensionReceiver = implicitReceiverValue), group++ ) } @@ -163,7 +163,7 @@ class CallResolver( // Member of local scope // fun test(x: Int) = x for (scope in localScopes) { - towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, scope), group++) + towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, scope), group++) } var blockDispatchReceivers = false @@ -181,7 +181,7 @@ class CallResolver( // val x = 0 // class Nested { val y = x } // } - towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, implicitScope), group++) + towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, implicitScope), group++) } if (implicitReceiverValue is ImplicitDispatchReceiverValue) { val implicitCompanionScope = implicitReceiverValue.implicitCompanionScope @@ -191,7 +191,7 @@ class CallResolver( // companion object { val x = 0 } // class Nested { val y = x } // } - towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, implicitCompanionScope), group++) + towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, implicitCompanionScope), group++) } if (!implicitReceiverValue.boundSymbol.fir.isInner) { blockDispatchReceivers = true @@ -203,7 +203,7 @@ class CallResolver( // val x = 0 // fun test() { x } for (scope in topLevelScopes) { - towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, scope), group++) + towerDataConsumer.consume(TowerDataKind.TOWER_LEVEL, ScopeTowerLevel(session, components, scope), group++) } return collector 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 4fde5b770d4..ea61065d171 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 @@ -151,6 +151,7 @@ class MemberScopeTowerLevel( // (if explicit receiver exists, it always *should* be an extension receiver) class ScopeTowerLevel( session: FirSession, + val bodyResolveComponents: BodyResolveComponents, val scope: FirScope, val implicitExtensionReceiver: ImplicitReceiverValue<*>? = null ) : SessionBasedTowerLevel(session) { @@ -187,7 +188,11 @@ class ScopeTowerLevel( ProcessorAction.NEXT } } - TowerScopeLevel.Token.Functions -> scope.processFunctionsAndConstructorsByName(name, session, ScopeSession()) { candidate -> + TowerScopeLevel.Token.Functions -> scope.processFunctionsAndConstructorsByName( + name, + session, + bodyResolveComponents.scopeSession + ) { candidate -> if (candidate.hasConsistentReceivers(extensionReceiver)) { processor.consumeCandidate( candidate as T, dispatchReceiverValue = candidate.dispatchReceiverValue(),