diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt index d435713f562..32f6cb89e22 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt @@ -59,12 +59,14 @@ import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE +import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner import org.jetbrains.kotlin.types.expressions.DataFlowAnalyzer import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices import org.jetbrains.kotlin.types.expressions.KotlinTypeInfo import org.jetbrains.kotlin.types.expressions.typeInfoFactory.createTypeInfo import org.jetbrains.kotlin.types.expressions.typeInfoFactory.noTypeInfo +import org.jetbrains.kotlin.types.refinement.TypeRefinement import org.jetbrains.kotlin.util.AstLoadingFilter import javax.inject.Inject @@ -76,7 +78,8 @@ class CallExpressionResolver( private val builtIns: KotlinBuiltIns, private val qualifiedExpressionResolver: QualifiedExpressionResolver, private val languageVersionSettings: LanguageVersionSettings, - private val dataFlowValueFactory: DataFlowValueFactory + private val dataFlowValueFactory: DataFlowValueFactory, + private val kotlinTypeRefiner: KotlinTypeRefiner ) { private lateinit var expressionTypingServices: ExpressionTypingServices @@ -366,7 +369,14 @@ class CallExpressionResolver( } val selector = element.selector - var selectorTypeInfo = getUnsafeSelectorTypeInfo(receiver, callOperationNode, selector, context, initialDataFlowInfoForArguments) + + @UseExperimental(TypeRefinement::class) + var selectorTypeInfo = + getUnsafeSelectorTypeInfo(receiver, callOperationNode, selector, context, initialDataFlowInfoForArguments) + .run { + val type = type ?: return@run this + replaceType(kotlinTypeRefiner.refineType(type)) + } if (receiver is Qualifier) { resolveDeferredReceiverInQualifiedExpression(receiver, selector, context)