KT-37131 Record default arguments in argument adaptation

Also, don't adapt argument when expected type is base reflection type
(KCallable<T>, etc), since such types don't contain parameter types.
This commit is contained in:
Dmitry Petrov
2020-03-05 16:37:51 +03:00
parent 7c7245fbb9
commit 4038c758ca
9 changed files with 332 additions and 2 deletions
@@ -304,7 +304,10 @@ class CallableReferencesCandidateFactory(
mappedArgumentTypes[index] = mappedArgument
}
if (resolvedArgument == ResolvedCallArgument.DefaultArgument) defaults++
if (resolvedArgument == ResolvedCallArgument.DefaultArgument) {
defaults++
mappedArguments[valueParameter] = resolvedArgument
}
}
if (mappedArgumentTypes.any { it == null }) return null
@@ -317,9 +320,16 @@ class CallableReferencesCandidateFactory(
val coercion = if (returnExpectedType.isUnit()) CoercionStrategy.COERCION_TO_UNIT else CoercionStrategy.NO_COERCION
val adaptedArguments =
if (expectedType != null && ReflectionTypes.isBaseTypeForNumberedReferenceTypes(expectedType))
emptyMap()
else
mappedArguments
return CallableReferenceAdaptation(
@Suppress("UNCHECKED_CAST") (mappedArgumentTypes as Array<KotlinType>),
coercion, defaults, mappedArguments
coercion, defaults,
adaptedArguments
)
}