From b4002accfb9a6eaa794bbba9ee25fad8f9ab36be Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 30 Jan 2019 02:27:56 +0300 Subject: [PATCH] Extract label name calculation from 'recordCallLabelForLambdaArgument()' --- .../jetbrains/kotlin/codegen/codegenUtil.kt | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/codegenUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/codegenUtil.kt index 74fc4f0bba7..2127adac00a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/codegenUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/codegenUtil.kt @@ -447,26 +447,25 @@ fun CallableDescriptor.needsExperimentalCoroutinesWrapper() = (this as? DeserializedMemberDescriptor)?.coroutinesExperimentalCompatibilityMode == CoroutinesCompatibilityMode.NEEDS_WRAPPER fun recordCallLabelForLambdaArgument(declaration: KtFunctionLiteral, bindingTrace: BindingTrace) { - fun storeLabelName(labelName: String) { - val functionDescriptor = bindingTrace[BindingContext.FUNCTION, declaration] ?: return - bindingTrace.record(CodegenBinding.CALL_LABEL_FOR_LAMBDA_ARGUMENT, functionDescriptor, labelName) - } + val labelName = getCallLabelForLambdaArgument(declaration, bindingTrace.bindingContext) ?: return + val functionDescriptor = bindingTrace[BindingContext.FUNCTION, declaration] ?: return + 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 if (lambdaExpressionParent is KtLabeledExpression) { - lambdaExpressionParent.name?.let { labelName -> - storeLabelName(labelName) - return - } + lambdaExpressionParent.name?.let { return it } } - val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return - val callExpression = lambdaArgument.parent as? KtCallExpression ?: return - val call = callExpression.getResolvedCall(bindingTrace.bindingContext) ?: return + val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return null + val callExpression = lambdaArgument.parent as? KtCallExpression ?: return null + 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;")