From a434b73fc855fa9b07a2096871b59958ab166b59 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Fri, 17 Mar 2023 14:42:57 +0100 Subject: [PATCH] [FIR] Refactor transform*UsingSmartcastInfo --- .../kotlin/fir/resolve/ResolveUtils.kt | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 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 62b9aa8d1fb..d58b750882d 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 @@ -114,7 +114,7 @@ fun FirFunction.constructFunctionType(kind: FunctionTypeKind? = null): ConeLooku fun FirAnonymousFunction.constructFunctionTypeRef(session: FirSession, kind: FunctionTypeKind? = null): FirResolvedTypeRef { var diagnostic: ConeDiagnostic? = null val kinds = session.functionTypeService.extractAllSpecialKindsForFunction(symbol) - val kindFromDeclaration = when(kinds.size) { + val kindFromDeclaration = when (kinds.size) { 0 -> null 1 -> kinds.single() else -> { @@ -370,35 +370,28 @@ private fun BodyResolveComponents.typeFromSymbol(symbol: FirBasedSymbol<*>, make fun BodyResolveComponents.transformQualifiedAccessUsingSmartcastInfo( qualifiedAccessExpression: FirQualifiedAccessExpression ): FirExpression { - val (stability, typesFromSmartCast) = - dataFlowAnalyzer.getTypeUsingSmartcastInfo(qualifiedAccessExpression) - ?: return qualifiedAccessExpression - val builder = transformExpressionUsingSmartcastInfo( - qualifiedAccessExpression, - stability, typesFromSmartCast - ) ?: return qualifiedAccessExpression - return builder.build() + val (stability, typesFromSmartCast) = dataFlowAnalyzer.getTypeUsingSmartcastInfo(qualifiedAccessExpression) + ?: return qualifiedAccessExpression + + return transformExpressionUsingSmartcastInfo(qualifiedAccessExpression, stability, typesFromSmartCast) ?: qualifiedAccessExpression } fun BodyResolveComponents.transformWhenSubjectExpressionUsingSmartcastInfo( whenSubjectExpression: FirWhenSubjectExpression ): FirExpression { - val (stability, typesFromSmartCast) = dataFlowAnalyzer.getTypeUsingSmartcastInfo(whenSubjectExpression) ?: return whenSubjectExpression - val builder = transformExpressionUsingSmartcastInfo( - whenSubjectExpression, - stability, typesFromSmartCast - ) ?: return whenSubjectExpression - return builder.build() + val (stability, typesFromSmartCast) = dataFlowAnalyzer.getTypeUsingSmartcastInfo(whenSubjectExpression) + ?: return whenSubjectExpression + + return transformExpressionUsingSmartcastInfo(whenSubjectExpression, stability, typesFromSmartCast) ?: whenSubjectExpression } fun BodyResolveComponents.transformDesugaredAssignmentValueUsingSmartcastInfo( expression: FirDesugaredAssignmentValueReferenceExpression ): FirExpression { - val (stability, typesFromSmartCast) = dataFlowAnalyzer.getTypeUsingSmartcastInfo(expression.expressionRef.value) ?: return expression - val builder = transformExpressionUsingSmartcastInfo( - expression, stability, typesFromSmartCast - ) ?: return expression - return builder.build() + val (stability, typesFromSmartCast) = dataFlowAnalyzer.getTypeUsingSmartcastInfo(expression.expressionRef.value) + ?: return expression + + return transformExpressionUsingSmartcastInfo(expression, stability, typesFromSmartCast) ?: expression } private val ConeKotlinType.isKindOfNothing @@ -416,7 +409,7 @@ private fun BodyResolveComponents.transformExpressionUsingSm expression: T, stability: PropertyStability, typesFromSmartCast: MutableList -): FirSmartCastExpressionBuilder? { +): FirSmartCastExpression? { val smartcastStability = stability.impliedSmartcastStability ?: if (dataFlowAnalyzer.isAccessToUnstableLocalVariable(expression)) { SmartcastStability.CAPTURED_VARIABLE @@ -458,7 +451,7 @@ private fun BodyResolveComponents.transformExpressionUsingSm annotations += expression.resultType.annotations delegatedTypeRef = expression.resultType } - return FirSmartCastExpressionBuilder().apply { + return buildSmartCastExpression { originalExpression = expression source = originalExpression.source?.fakeElement(KtFakeSourceElementKind.SmartCastExpression) smartcastType = intersectedTypeRef @@ -469,7 +462,7 @@ private fun BodyResolveComponents.transformExpressionUsingSm } } - return FirSmartCastExpressionBuilder().apply { + return buildSmartCastExpression { originalExpression = expression source = originalExpression.source?.fakeElement(KtFakeSourceElementKind.SmartCastExpression) smartcastType = intersectedTypeRef