diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 8a5afb57f78..e7b35043b5f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -199,17 +199,27 @@ fun FirFunction.constructFunctionalTypeRef(session: FirSession): FirResolvedType is FirAnonymousFunction -> receiverTypeRef else -> null } - val receiverType = receiverTypeRef?.coneTypeUnsafe() val parameters = valueParameters.map { it.returnTypeRef.coneTypeSafe() ?: ConeKotlinErrorType("No type for parameter") } val rawReturnType = (this as FirTypedDeclaration).returnTypeRef.coneTypeUnsafe() + + val functionalType = createFunctionalType(session, parameters, receiverTypeRef?.coneTypeUnsafe(), rawReturnType) + + return FirResolvedTypeRefImpl(psi, functionalType) +} + +fun createFunctionalType( + session: FirSession, + parameters: List, + receiverType: ConeKotlinType?, + rawReturnType: ConeKotlinType +): ConeLookupTagBasedType { val receiverAndParameterTypes = listOfNotNull(receiverType) + parameters + listOf(rawReturnType) val functionalTypeId = StandardClassIds.byName("Function${receiverAndParameterTypes.size - 1}") val functionalType = functionalTypeId(session.service()).constructType(receiverAndParameterTypes.toTypedArray(), isNullable = false) - - return FirResolvedTypeRefImpl(psi, functionalType) + return functionalType } fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifier): FirTypeRef {