[Analysis API] KTIJ-24527 Properly handle typealiased functional types
Use expanded ConeTypes to get correct parameters and return types Also, fix the order of rendering modifiers in `KtFunctionalTypeRenderer` ^KTIJ-24527 Fixed
This commit is contained in:
@@ -229,6 +229,14 @@ fun ConeKotlinType.findContributedInvokeSymbol(
|
||||
|
||||
// ---------------------------------------------- function type type argument extraction ----------------------------------------------
|
||||
|
||||
fun ConeKotlinType.contextReceiversTypes(session: FirSession): List<ConeKotlinType> {
|
||||
if (!isSomeFunctionType(session)) return emptyList()
|
||||
return fullyExpandedType(session).let { expanded ->
|
||||
val contextReceivers = expanded.typeArguments.take(expanded.contextReceiversNumberForFunctionType)
|
||||
contextReceivers.map { it.typeOrDefault(session.builtinTypes.nothingType.type) }
|
||||
}
|
||||
}
|
||||
|
||||
fun ConeKotlinType.receiverType(session: FirSession): ConeKotlinType? {
|
||||
if (!isSomeFunctionType(session) || !isExtensionFunctionType(session)) return null
|
||||
return fullyExpandedType(session).let { expanded ->
|
||||
@@ -242,6 +250,17 @@ fun ConeKotlinType.returnType(session: FirSession): ConeKotlinType {
|
||||
return fullyExpandedType(session).typeArguments.last().typeOrDefault(session.builtinTypes.nullableAnyType.type)
|
||||
}
|
||||
|
||||
fun ConeKotlinType.valueParameterTypesWithoutReceivers(session: FirSession): List<ConeKotlinType> {
|
||||
require(this is ConeClassLikeType)
|
||||
// TODO: add requirement
|
||||
val expandedType = fullyExpandedType(session)
|
||||
|
||||
val receiversNumber = expandedType.contextReceiversNumberForFunctionType + if (expandedType.isExtensionFunctionType) 1 else 0
|
||||
val valueParameters = expandedType.typeArguments.drop(receiversNumber).dropLast(1)
|
||||
|
||||
return valueParameters.map { it.typeOrDefault(session.builtinTypes.nothingType.type) }
|
||||
}
|
||||
|
||||
fun ConeKotlinType.valueParameterTypesIncludingReceiver(session: FirSession): List<ConeKotlinType> {
|
||||
require(this is ConeClassLikeType)
|
||||
// TODO: add requirement
|
||||
|
||||
Reference in New Issue
Block a user