[FIR] Fix duplicate setting of return type ref in desugared assignment
This commit is contained in:
committed by
Space Team
parent
3904966e2c
commit
d8c1830b06
+14
-17
@@ -625,7 +625,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
|
|||||||
val assignmentLeftArgument = buildDesugaredAssignmentValueReferenceExpression {
|
val assignmentLeftArgument = buildDesugaredAssignmentValueReferenceExpression {
|
||||||
expressionRef = FirExpressionRef<FirExpression>().apply { bind(unwrappedLeftArgument) }
|
expressionRef = FirExpressionRef<FirExpression>().apply { bind(unwrappedLeftArgument) }
|
||||||
source = leftArgument.source?.fakeElement(KtFakeSourceElementKind.DesugaredCompoundAssignment)
|
source = leftArgument.source?.fakeElement(KtFakeSourceElementKind.DesugaredCompoundAssignment)
|
||||||
}.also { storeTypeFromCallee(it) }
|
}
|
||||||
|
|
||||||
val assignment =
|
val assignment =
|
||||||
buildVariableAssignment {
|
buildVariableAssignment {
|
||||||
@@ -861,7 +861,19 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
|
|||||||
desugaredAssignmentValueReferenceExpression: FirDesugaredAssignmentValueReferenceExpression,
|
desugaredAssignmentValueReferenceExpression: FirDesugaredAssignmentValueReferenceExpression,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement {
|
): FirStatement {
|
||||||
storeTypeFromCallee(desugaredAssignmentValueReferenceExpression)
|
val referencedExpression = desugaredAssignmentValueReferenceExpression.expressionRef.value
|
||||||
|
if (referencedExpression is FirQualifiedAccessExpression) {
|
||||||
|
val typeFromCallee = components.typeFromCallee(referencedExpression)
|
||||||
|
desugaredAssignmentValueReferenceExpression.resultType = typeFromCallee.withReplacedConeType(
|
||||||
|
session.typeApproximator.approximateToSubType(
|
||||||
|
typeFromCallee.type,
|
||||||
|
TypeApproximatorConfiguration.FinalApproximationAfterResolutionAndInference
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
desugaredAssignmentValueReferenceExpression.resultType =
|
||||||
|
referencedExpression.resultType.copyWithNewSourceKind(KtFakeSourceElementKind.ImplicitTypeRef)
|
||||||
|
}
|
||||||
return desugaredAssignmentValueReferenceExpression
|
return desugaredAssignmentValueReferenceExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1539,19 +1551,4 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun storeTypeFromCallee(expression: FirDesugaredAssignmentValueReferenceExpression) {
|
|
||||||
val referencedExpression = expression.expressionRef.value
|
|
||||||
|
|
||||||
if (referencedExpression is FirQualifiedAccessExpression) {
|
|
||||||
val typeFromCallee = components.typeFromCallee(referencedExpression)
|
|
||||||
expression.resultType = typeFromCallee.withReplacedConeType(
|
|
||||||
session.typeApproximator.approximateToSubType(
|
|
||||||
typeFromCallee.type,
|
|
||||||
TypeApproximatorConfiguration.FinalApproximationAfterResolutionAndInference
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
expression.resultType = referencedExpression.resultType.copyWithNewSourceKind(KtFakeSourceElementKind.ImplicitTypeRef)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user