From e42f07b0311b4c513e4a5d650ed114877e4d0cf9 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 14 Nov 2017 15:08:28 +0300 Subject: [PATCH] [NI] Wait for proper constraints to fix type for callable reference If expected type is a type variable, then we'll wait for proper constraints, but previously we resolved callable reference as it didn't have expected type at all, because type variable isn't a functional type Consider the following example: fun foo(i: Int) {} fun foo(s: String) {} fun id(x: T): T = x fun test() { val x1: (Int) -> Unit = id(id(::foo)) } Here we shouldn't resolve callable reference until we get constraint from expected type of `x1` --- .../org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt index abfeb957acc..c32be7a0d60 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/ResolutionAtoms.kt @@ -136,7 +136,7 @@ class ResolvedCallableReferenceAtom( override val inputTypes: Collection get() { - val functionType = getFunctionTypeFromCallableReferenceExpectedType(expectedType) ?: return emptyList() + val functionType = getFunctionTypeFromCallableReferenceExpectedType(expectedType) ?: return listOfNotNull(expectedType) val parameters = functionType.getValueParameterTypesFromFunctionType().map { it.type.unwrap() } val receiver = functionType.getReceiverTypeFromFunctionType()?.unwrap() return receiver?.let { parameters + it } ?: parameters