From f54971291267c72bbd7de4622839cddb2bb49430 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 2 Aug 2023 17:17:49 +0200 Subject: [PATCH] [FIR] FirCallableSymbol: introduce calculateReturnType It will help to avoid copy-pasted logic there it is needed ^KT-60728 --- .../components/KtFirExpressionTypeProvider.kt | 6 +----- .../fir/symbols/impl/FirCallableSymbol.kt | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index 6577a447d7c..8d0ef6fbc32 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.resolve.constructFunctionType import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi @@ -179,10 +178,7 @@ internal class KtFirExpressionTypeProvider( override fun getFunctionalTypeForKtFunction(declaration: KtFunction): KtType { val firFunction = declaration.resolveToFirSymbol(firResolveSession, FirResolvePhase.TYPES).fir as FirFunction - if (firFunction.returnTypeRef is FirImplicitTypeRef) { - firFunction.lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) - } - + firFunction.symbol.calculateReturnType() return firFunction.constructFunctionType(firFunction.specialFunctionTypeKind(firResolveSession.useSiteFirSession)).asKtType() } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt index cf757b7734d..49ec4dd13be 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt @@ -13,22 +13,24 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.mpp.CallableSymbolMarker import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.util.OperatorNameConventions abstract class FirCallableSymbol : FirBasedSymbol(), CallableSymbolMarker { abstract val callableId: CallableId val resolvedReturnTypeRef: FirResolvedTypeRef get() { - ensureType(fir.returnTypeRef) - val returnTypeRef = fir.returnTypeRef - if (returnTypeRef !is FirResolvedTypeRef) { - errorInLazyResolve("returnTypeRef", returnTypeRef::class, FirResolvedTypeRef::class) - } - - return returnTypeRef + calculateReturnType() + return fir.returnTypeRef as FirResolvedTypeRef } + fun calculateReturnType() { + ensureType(fir.returnTypeRef) + val returnTypeRef = fir.returnTypeRef + if (returnTypeRef !is FirResolvedTypeRef) { + errorInLazyResolve("returnTypeRef", returnTypeRef::class, FirResolvedTypeRef::class) + } + } + val resolvedReturnType: ConeKotlinType get() = resolvedReturnTypeRef.coneType