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,36 +201,45 @@ 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,
explicitReceiver,
invokeBuiltinExtensionMode,
useImplicitReceiverAsBuiltinInvokeArgument
)
}
}
private fun enqueueResolverTasksForInvoke(
invokeFunctionInfo: CallInfo,
explicitReceiver: ExpressionReceiverValue,
invokeBuiltinExtensionMode: Boolean,
useImplicitReceiverAsBuiltinInvokeArgument: Boolean
) {
if (invokeBuiltinExtensionMode) {
enqueueResolverTask { enqueueResolverTask {
towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument( towerResolverSession.runResolverForBuiltinInvokeExtensionWithExplicitArgument(
invokeFunctionInfo, explicitReceiver invokeFunctionInfo, explicitReceiver
) )
} }
return
} }
useImplicitReceiverAsBuiltinInvokeArgument -> {
if (useImplicitReceiverAsBuiltinInvokeArgument) {
enqueueResolverTask { enqueueResolverTask {
towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument( towerResolverSession.runResolverForBuiltinInvokeExtensionWithImplicitArgument(
invokeFunctionInfo, explicitReceiver invokeFunctionInfo, explicitReceiver
) )
} }
}
enqueueResolverTask { enqueueResolverTask {
towerResolverSession.runResolverForInvoke( towerResolverSession.runResolverForInvoke(
invokeFunctionInfo, explicitReceiver invokeFunctionInfo, explicitReceiver
) )
} }
} }
else -> {
enqueueResolverTask {
towerResolverSession.runResolverForInvoke(
invokeFunctionInfo, explicitReceiver
)
}
}
}
}
}
} }
private class TowerScopeLevelProcessor( private class TowerScopeLevelProcessor(