[FIR] Fix generic sam conversion in call completion

#KT-60903 Fixed
This commit is contained in:
Kirill Rakhman
2023-08-15 19:04:47 +02:00
committed by Space Team
parent 3ecadf1af7
commit 43180597fe
16 changed files with 119 additions and 14 deletions
@@ -560,20 +560,7 @@ class FirCallCompletionResultsWriterTransformer(
// a built-in functional type, no-brainer
expectedArgumentType.isSomeFunctionType(session) -> expectedArgumentType
// fun interface (a.k.a. SAM), then unwrap it and build a functional type from that interface function
expectedArgumentType is ConeClassLikeType -> {
expectedArgumentType.lookupTag.toFirRegularClass(session)?.let answer@{ firRegularClass ->
val functionType = samResolver.getFunctionTypeForPossibleSamType(firRegularClass.defaultType())
?: return@answer null
val kind = functionType.functionTypeKind(session) ?: FunctionTypeKind.Function
createFunctionType(
kind,
functionType.typeArguments.dropLast(1).map { it as ConeKotlinType },
null,
functionType.typeArguments.last() as ConeKotlinType
)
}
}
else -> null
else -> samResolver.getFunctionTypeForPossibleSamType(expectedArgumentType)?.lowerBoundIfFlexible()
}
}