From 786139624638dd7efadc444bf703b3289ba2f22a Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 2 Aug 2019 11:58:29 +0300 Subject: [PATCH] [FIR] Add util function for creating functional cone type --- .../jetbrains/kotlin/fir/resolve/ResolveUtils.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 {