diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt index 72e17ba5b98..7ded92b79a7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt @@ -201,34 +201,43 @@ internal class LevelHandler( val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression) callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo) - when { - invokeBuiltinExtensionMode -> { - enqueueResolverTask { - towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument( - invokeFunctionInfo, explicitReceiver - ) - } - } - useImplicitReceiverAsBuiltinInvokeArgument -> { - enqueueResolverTask { - towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument( - invokeFunctionInfo, explicitReceiver - ) - } - enqueueResolverTask { - towerResolverSession.runResolverForInvoke( - invokeFunctionInfo, explicitReceiver - ) - } - } - else -> { - enqueueResolverTask { - towerResolverSession.runResolverForInvoke( - invokeFunctionInfo, explicitReceiver - ) - } - } + enqueueResolverTasksForInvoke( + invokeFunctionInfo, + explicitReceiver, + invokeBuiltinExtensionMode, + useImplicitReceiverAsBuiltinInvokeArgument + ) + } + } + + private fun enqueueResolverTasksForInvoke( + invokeFunctionInfo: CallInfo, + explicitReceiver: ExpressionReceiverValue, + invokeBuiltinExtensionMode: Boolean, + useImplicitReceiverAsBuiltinInvokeArgument: Boolean + ) { + if (invokeBuiltinExtensionMode) { + enqueueResolverTask { + towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument( + invokeFunctionInfo, explicitReceiver + ) } + + return + } + + if (useImplicitReceiverAsBuiltinInvokeArgument) { + enqueueResolverTask { + towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument( + invokeFunctionInfo, explicitReceiver + ) + } + } + + enqueueResolverTask { + towerResolverSession.runResolverForInvoke( + invokeFunctionInfo, explicitReceiver + ) } } }