diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt index ddacd4ec672..691f3270728 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt @@ -50,7 +50,6 @@ class CandidateFactory private constructor( scope: FirScope?, dispatchReceiverValue: ReceiverValue? = null, extensionReceiverValue: ReceiverValue? = null, - builtInExtensionFunctionReceiverValue: ReceiverValue? = null, objectsByName: Boolean = false ): Candidate { @Suppress("NAME_SHADOWING") @@ -59,9 +58,7 @@ class CandidateFactory private constructor( val result = Candidate( symbol, dispatchReceiverValue, extensionReceiverValue, explicitReceiverKind, context.inferenceComponents.constraintSystemFactory, baseSystem, - builtInExtensionFunctionReceiverValue?.receiverExpression?.let { - callInfo.withReceiverAsArgument(it) - } ?: callInfo, + callInfo, scope, isFromCompanionObjectTypeScope = when (explicitReceiverKind) { ExplicitReceiverKind.EXTENSION_RECEIVER -> extensionReceiverValue.isCandidateFromCompanionObjectTypeScope() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt index 059a389166a..c73dcec8cf9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirInvokeResolveTowerExtension.kt @@ -424,12 +424,9 @@ private class InvokeFunctionResolveTask( .InvokeResolvePriority(InvokeResolvePriority.INVOKE_EXTENSION) processLevel( - invokeReceiverValue.toMemberScopeTowerLevel( - // Try to supply `implicitReceiverValue` as an "x" in "f.invoke(x)" - extensionReceiver = implicitReceiverValue, - implicitExtensionInvokeMode = true - ), - info, towerGroup, + invokeReceiverValue.toMemberScopeTowerLevel(), + // Try to supply `implicitReceiverValue` as an "x" in "f.invoke(x)" + info.withReceiverAsArgument(implicitReceiverValue.receiverExpression), towerGroup, ExplicitReceiverKind.DISPATCH_RECEIVER ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt index 1bc1b5975dd..13c6d4986d8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt @@ -87,11 +87,10 @@ internal abstract class FirBaseTowerResolveTask( ) protected fun ReceiverValue.toMemberScopeTowerLevel( - extensionReceiver: ReceiverValue? = null, - implicitExtensionInvokeMode: Boolean = false + extensionReceiver: ReceiverValue? = null ) = MemberScopeTowerLevel( components, this, - extensionReceiver, implicitExtensionInvokeMode, + extensionReceiver, ) protected inline fun enumerateTowerLevels( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolver.kt index c2506bf67b7..c8169328d86 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolver.kt @@ -116,8 +116,7 @@ class FirTowerResolver( ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, scope, dispatchReceiver, - extensionReceiverValue = null, - builtInExtensionFunctionReceiverValue = null + extensionReceiverValue = null ), context ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt index b25c8cdc828..57487cb319a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt @@ -76,7 +76,6 @@ private class TowerScopeLevelProcessor( dispatchReceiverValue: ReceiverValue?, extensionReceiverValue: ReceiverValue?, scope: FirScope, - builtInExtensionFunctionReceiverValue: ReceiverValue?, objectsByName: Boolean ) { resultCollector.consumeCandidate( @@ -87,7 +86,6 @@ private class TowerScopeLevelProcessor( scope, dispatchReceiverValue, extensionReceiverValue, - builtInExtensionFunctionReceiverValue, objectsByName ), candidateFactory.context ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt index e3aed94d65a..2a601125a09 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers import org.jetbrains.kotlin.types.AbstractTypeChecker -import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.SmartList enum class ProcessResult { @@ -59,7 +58,6 @@ abstract class TowerScopeLevel { dispatchReceiverValue: ReceiverValue?, extensionReceiverValue: ReceiverValue?, scope: FirScope, - builtInExtensionFunctionReceiverValue: ReceiverValue? = null, objectsByName: Boolean = false ) } @@ -76,7 +74,6 @@ class MemberScopeTowerLevel( private val bodyResolveComponents: BodyResolveComponents, val dispatchReceiverValue: ReceiverValue, private val extensionReceiver: ReceiverValue? = null, - private val implicitExtensionInvokeMode: Boolean = false, ) : TowerScopeLevel() { private val scopeSession: ScopeSession get() = bodyResolveComponents.scopeSession private val session: FirSession get() = bodyResolveComponents.session @@ -106,9 +103,7 @@ class MemberScopeTowerLevel( val result = mutableListOf() processScopeMembers { candidate -> empty = false - if (candidate is FirCallableSymbol<*> && - (implicitExtensionInvokeMode || candidate.hasConsistentExtensionReceiver(extensionReceiver)) - ) { + if (candidate is FirCallableSymbol<*> && candidate.hasConsistentExtensionReceiver(extensionReceiver)) { val fir = candidate.fir if ((fir as? FirConstructor)?.isInner == false) { return@processScopeMembers @@ -126,23 +121,12 @@ class MemberScopeTowerLevel( candidatesWithScope: List> ) { for ((scope, candidate) in candidatesWithScope) { - if (candidate is FirCallableSymbol<*> && - (implicitExtensionInvokeMode || candidate.hasConsistentExtensionReceiver(extensionReceiver)) - ) { + if (candidate is FirCallableSymbol<*> && candidate.hasConsistentExtensionReceiver(extensionReceiver)) { output.consumeCandidate( candidate, dispatchReceiverValue, extensionReceiverValue = extensionReceiver, scope ) - - if (implicitExtensionInvokeMode) { - output.consumeCandidate( - candidate, dispatchReceiverValue, - extensionReceiverValue = null, - scope, - builtInExtensionFunctionReceiverValue = this.extensionReceiver - ) - } } else if (candidate is FirClassLikeSymbol<*>) { output.consumeCandidate(candidate, null, extensionReceiver, scope) } @@ -153,10 +137,6 @@ class MemberScopeTowerLevel( info: CallInfo, processor: TowerScopeLevelProcessor> ): ProcessResult { - val isInvoke = info.name == OperatorNameConventions.INVOKE - if (implicitExtensionInvokeMode && !isInvoke) { - return ProcessResult.FOUND - } val lookupTracker = session.lookupTracker return processMembers(processor) { consumer -> withMemberCallLookup(lookupTracker, info) { lookupCtx ->