From 58f73bd82a1de782a303aff66c9babbbdf3cd5a3 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Mon, 22 May 2017 17:29:45 +0300 Subject: [PATCH] [NI] Use right DFI for arguments smart-casts. --- .../jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt index 7156b62eefd..825fc27ac23 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt @@ -159,7 +159,8 @@ internal fun createSimplePSICallArgument( val baseType = onlyResolvedCall?.currentReturnType ?: typeInfo.type?.unwrap() ?: return null val preparedType = prepareArgumentTypeRegardingCaptureTypes(baseType) ?: baseType - val receiverToCast = context.transformToReceiverWithSmartCastInfo( + // we should use DFI after this argument, because there can be some useful smartcast. Popular case: if branches. + val receiverToCast = context.replaceDataFlowInfo(typeInfo.dataFlowInfo).transformToReceiverWithSmartCastInfo( ExpressionReceiver.create(ktExpression, baseType, context.trace.bindingContext) ).let { ReceiverValueWithSmartCastInfo(it.receiverValue.replaceType(preparedType), it.possibleTypes, it.isStable)