Fix exception when expected type is subtype of a function type

#KT-28984 Fixed
 #EA-132850 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2018-12-17 12:33:03 +03:00
parent 68c65a5014
commit 84222afe2f
7 changed files with 50 additions and 8 deletions
@@ -350,7 +350,7 @@ fun extractInputOutputTypesFromCallableReferenceExpectedType(expectedType: Unwra
expectedType.isFunctionType ->
extractInputOutputTypesFromFunctionType(expectedType)
expectedType.isBaseTypeForNumberedReferenceTypes() ->
ReflectionTypes.isBaseTypeForNumberedReferenceTypes(expectedType) ->
InputOutputTypes(emptyList(), expectedType.arguments.single().type.unwrap())
ReflectionTypes.isNumberedKFunctionOrKSuspendFunction(expectedType) -> {
@@ -367,11 +367,6 @@ fun extractInputOutputTypesFromCallableReferenceExpectedType(expectedType: Unwra
}
}
private fun UnwrappedType.isBaseTypeForNumberedReferenceTypes(): Boolean =
ReflectionTypes.hasKPropertyTypeFqName(this) ||
ReflectionTypes.hasKMutablePropertyTypeFqName(this) ||
ReflectionTypes.hasKCallableTypeFqName(this)
private fun extractInputOutputTypesFromFunctionType(functionType: UnwrappedType): InputOutputTypes {
val receiver = functionType.getReceiverTypeFromFunctionType()?.unwrap()
val parameters = functionType.getValueParameterTypesFromFunctionType().map { it.type.unwrap() }