Extract label name calculation from 'recordCallLabelForLambdaArgument()'

This commit is contained in:
Yan Zhulanow
2019-01-30 02:27:56 +03:00
parent 34c5954d75
commit b4002accfb
@@ -447,26 +447,25 @@ fun CallableDescriptor.needsExperimentalCoroutinesWrapper() =
(this as? DeserializedMemberDescriptor)?.coroutinesExperimentalCompatibilityMode == CoroutinesCompatibilityMode.NEEDS_WRAPPER (this as? DeserializedMemberDescriptor)?.coroutinesExperimentalCompatibilityMode == CoroutinesCompatibilityMode.NEEDS_WRAPPER
fun recordCallLabelForLambdaArgument(declaration: KtFunctionLiteral, bindingTrace: BindingTrace) { fun recordCallLabelForLambdaArgument(declaration: KtFunctionLiteral, bindingTrace: BindingTrace) {
fun storeLabelName(labelName: String) { val labelName = getCallLabelForLambdaArgument(declaration, bindingTrace.bindingContext) ?: return
val functionDescriptor = bindingTrace[BindingContext.FUNCTION, declaration] ?: return val functionDescriptor = bindingTrace[BindingContext.FUNCTION, declaration] ?: return
bindingTrace.record(CodegenBinding.CALL_LABEL_FOR_LAMBDA_ARGUMENT, functionDescriptor, labelName) bindingTrace.record(CodegenBinding.CALL_LABEL_FOR_LAMBDA_ARGUMENT, functionDescriptor, labelName)
}
val lambdaExpression = declaration.parent as? KtLambdaExpression ?: return }
fun getCallLabelForLambdaArgument(declaration: KtFunctionLiteral, bindingContext: BindingContext): String? {
val lambdaExpression = declaration.parent as? KtLambdaExpression ?: return null
val lambdaExpressionParent = lambdaExpression.parent val lambdaExpressionParent = lambdaExpression.parent
if (lambdaExpressionParent is KtLabeledExpression) { if (lambdaExpressionParent is KtLabeledExpression) {
lambdaExpressionParent.name?.let { labelName -> lambdaExpressionParent.name?.let { return it }
storeLabelName(labelName)
return
}
} }
val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return null
val callExpression = lambdaArgument.parent as? KtCallExpression ?: return val callExpression = lambdaArgument.parent as? KtCallExpression ?: return null
val call = callExpression.getResolvedCall(bindingTrace.bindingContext) ?: return val call = callExpression.getResolvedCall(bindingContext) ?: return null
storeLabelName(call.resultingDescriptor.name.asString()) return call.resultingDescriptor.name.asString()
} }
private val ARRAY_OF_STRINGS_TYPE = Type.getType("[Ljava/lang/String;") private val ARRAY_OF_STRINGS_TYPE = Type.getType("[Ljava/lang/String;")