Extract label name calculation from 'recordCallLabelForLambdaArgument()'
This commit is contained in:
@@ -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;")
|
||||||
|
|||||||
Reference in New Issue
Block a user