FIR: Extract function in TowerLevelHandler

This commit is contained in:
Denis Zharkov
2020-03-27 16:33:42 +03:00
parent 36d3abad51
commit b97ce3d6ef
@@ -201,34 +201,43 @@ internal class LevelHandler(
val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression) val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression)
callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo) callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo)
when { enqueueResolverTasksForInvoke(
invokeBuiltinExtensionMode -> { invokeFunctionInfo,
enqueueResolverTask { explicitReceiver,
towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument( invokeBuiltinExtensionMode,
invokeFunctionInfo, explicitReceiver useImplicitReceiverAsBuiltinInvokeArgument
) )
} }
} }
useImplicitReceiverAsBuiltinInvokeArgument -> {
enqueueResolverTask { private fun enqueueResolverTasksForInvoke(
towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument( invokeFunctionInfo: CallInfo,
invokeFunctionInfo, explicitReceiver explicitReceiver: ExpressionReceiverValue,
) invokeBuiltinExtensionMode: Boolean,
} useImplicitReceiverAsBuiltinInvokeArgument: Boolean
enqueueResolverTask { ) {
towerResolverSession.runResolverForInvoke( if (invokeBuiltinExtensionMode) {
invokeFunctionInfo, explicitReceiver enqueueResolverTask {
) towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument(
} invokeFunctionInfo, explicitReceiver
} )
else -> {
enqueueResolverTask {
towerResolverSession.runResolverForInvoke(
invokeFunctionInfo, explicitReceiver
)
}
}
} }
return
}
if (useImplicitReceiverAsBuiltinInvokeArgument) {
enqueueResolverTask {
towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument(
invokeFunctionInfo, explicitReceiver
)
}
}
enqueueResolverTask {
towerResolverSession.runResolverForInvoke(
invokeFunctionInfo, explicitReceiver
)
} }
} }
} }