[FIR] Fix collection of annotations for assigment expressions
This commit is contained in:
committed by
TeamCityServer
parent
d0a4ca199d
commit
05b91d37a7
+2
-1
@@ -293,7 +293,8 @@ class ExpressionsConverter(
|
|||||||
binaryExpression.toFirSourceElement(),
|
binaryExpression.toFirSourceElement(),
|
||||||
rightArg,
|
rightArg,
|
||||||
rightArgAsFir,
|
rightArgAsFir,
|
||||||
firOperation
|
firOperation,
|
||||||
|
leftArgAsFir.annotations
|
||||||
) { getAsFirExpression(this) }
|
) { getAsFirExpression(this) }
|
||||||
} else {
|
} else {
|
||||||
buildEqualityOperatorCall {
|
buildEqualityOperatorCall {
|
||||||
|
|||||||
@@ -2162,7 +2162,13 @@ open class RawFirBuilder(
|
|||||||
} else {
|
} else {
|
||||||
val firOperation = operationToken.toFirOperation()
|
val firOperation = operationToken.toFirOperation()
|
||||||
if (firOperation in FirOperation.ASSIGNMENTS) {
|
if (firOperation in FirOperation.ASSIGNMENTS) {
|
||||||
return expression.left.generateAssignment(source, expression.right, rightArgument, firOperation) {
|
return expression.left.generateAssignment(
|
||||||
|
source,
|
||||||
|
expression.right,
|
||||||
|
rightArgument,
|
||||||
|
firOperation,
|
||||||
|
leftArgument.annotations
|
||||||
|
) {
|
||||||
(this as KtExpression).toFirExpression("Incorrect expression in assignment: ${expression.text}")
|
(this as KtExpression).toFirExpression("Incorrect expression in assignment: ${expression.text}")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+16
-5
@@ -540,7 +540,9 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
generateResolvedAccessExpression(source, resultVar)
|
generateResolvedAccessExpression(source, resultVar)
|
||||||
else
|
else
|
||||||
resultInitializer,
|
resultInitializer,
|
||||||
FirOperation.ASSIGN, convert
|
FirOperation.ASSIGN,
|
||||||
|
resultInitializer.annotations,
|
||||||
|
convert
|
||||||
)
|
)
|
||||||
|
|
||||||
fun appendAssignment() {
|
fun appendAssignment() {
|
||||||
@@ -889,6 +891,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
rhs: T?,
|
rhs: T?,
|
||||||
value: FirExpression, // value is FIR for rhs
|
value: FirExpression, // value is FIR for rhs
|
||||||
operation: FirOperation,
|
operation: FirOperation,
|
||||||
|
annotations: List<FirAnnotation>,
|
||||||
convert: T.() -> FirExpression
|
convert: T.() -> FirExpression
|
||||||
): FirStatement {
|
): FirStatement {
|
||||||
val unwrappedLhs = this.unwrap() ?: return buildErrorExpression {
|
val unwrappedLhs = this.unwrap() ?: return buildErrorExpression {
|
||||||
@@ -901,9 +904,11 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
context.arraySetArgument[unwrappedLhs] = value
|
context.arraySetArgument[unwrappedLhs] = value
|
||||||
}
|
}
|
||||||
return if (operation == FirOperation.ASSIGN) {
|
return if (operation == FirOperation.ASSIGN) {
|
||||||
unwrappedLhs.convert()
|
val result = unwrappedLhs.convert()
|
||||||
|
(result.annotations as MutableList<FirAnnotation>) += annotations
|
||||||
|
result
|
||||||
} else {
|
} else {
|
||||||
generateAugmentedArraySetCall(unwrappedLhs, baseSource, operation, rhs, convert)
|
generateAugmentedArraySetCall(unwrappedLhs, baseSource, operation, rhs, annotations, convert)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -920,6 +925,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
rightArgument = value
|
rightArgument = value
|
||||||
|
this.annotations += annotations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
require(operation == FirOperation.ASSIGN)
|
require(operation == FirOperation.ASSIGN)
|
||||||
@@ -927,7 +933,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
if (this?.elementType == SAFE_ACCESS_EXPRESSION && this != null) {
|
if (this?.elementType == SAFE_ACCESS_EXPRESSION && this != null) {
|
||||||
val safeCallNonAssignment = convert() as? FirSafeCallExpression
|
val safeCallNonAssignment = convert() as? FirSafeCallExpression
|
||||||
if (safeCallNonAssignment != null) {
|
if (safeCallNonAssignment != null) {
|
||||||
return putAssignmentToSafeCall(safeCallNonAssignment, baseSource, value)
|
return putAssignmentToSafeCall(safeCallNonAssignment, baseSource, value, annotations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -935,6 +941,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
source = baseSource
|
source = baseSource
|
||||||
rValue = value
|
rValue = value
|
||||||
calleeReference = initializeLValue(unwrappedLhs) { convert() as? FirQualifiedAccess }
|
calleeReference = initializeLValue(unwrappedLhs) { convert() as? FirQualifiedAccess }
|
||||||
|
this.annotations += annotations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -942,7 +949,8 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
private fun putAssignmentToSafeCall(
|
private fun putAssignmentToSafeCall(
|
||||||
safeCallNonAssignment: FirSafeCallExpression,
|
safeCallNonAssignment: FirSafeCallExpression,
|
||||||
baseSource: KtSourceElement?,
|
baseSource: KtSourceElement?,
|
||||||
value: FirExpression
|
value: FirExpression,
|
||||||
|
annotations: List<FirAnnotation>
|
||||||
): FirSafeCallExpression {
|
): FirSafeCallExpression {
|
||||||
val nestedAccess = safeCallNonAssignment.regularQualifiedAccess
|
val nestedAccess = safeCallNonAssignment.regularQualifiedAccess
|
||||||
|
|
||||||
@@ -951,6 +959,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
rValue = value
|
rValue = value
|
||||||
calleeReference = nestedAccess.calleeReference
|
calleeReference = nestedAccess.calleeReference
|
||||||
explicitReceiver = safeCallNonAssignment.checkedSubjectRef.value
|
explicitReceiver = safeCallNonAssignment.checkedSubjectRef.value
|
||||||
|
this.annotations += annotations
|
||||||
}
|
}
|
||||||
|
|
||||||
safeCallNonAssignment.replaceRegularQualifiedAccess(
|
safeCallNonAssignment.replaceRegularQualifiedAccess(
|
||||||
@@ -965,6 +974,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
baseSource: KtSourceElement?,
|
baseSource: KtSourceElement?,
|
||||||
operation: FirOperation,
|
operation: FirOperation,
|
||||||
rhs: T?,
|
rhs: T?,
|
||||||
|
annotations: List<FirAnnotation>,
|
||||||
convert: T.() -> FirExpression
|
convert: T.() -> FirExpression
|
||||||
): FirStatement {
|
): FirStatement {
|
||||||
return buildAugmentedArraySetCall {
|
return buildAugmentedArraySetCall {
|
||||||
@@ -972,6 +982,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
this.operation = operation
|
this.operation = operation
|
||||||
assignCall = generateAugmentedCallForAugmentedArraySetCall(unwrappedReceiver, operation, rhs, convert)
|
assignCall = generateAugmentedCallForAugmentedArraySetCall(unwrappedReceiver, operation, rhs, convert)
|
||||||
setGetBlock = generateSetGetBlockForAugmentedArraySetCall(unwrappedReceiver, baseSource, operation, rhs, convert)
|
setGetBlock = generateSetGetBlockForAugmentedArraySetCall(unwrappedReceiver, baseSource, operation, rhs, convert)
|
||||||
|
this.annotations += annotations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -535,6 +535,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
|
|||||||
dispatchReceiver = it.dispatchReceiver
|
dispatchReceiver = it.dispatchReceiver
|
||||||
extensionReceiver = it.extensionReceiver
|
extensionReceiver = it.extensionReceiver
|
||||||
}
|
}
|
||||||
|
annotations += assignmentOperatorStatement.annotations
|
||||||
}
|
}
|
||||||
return assignment.transform(transformer, ResolutionMode.ContextIndependent)
|
return assignment.transform(transformer, ResolutionMode.ContextIndependent)
|
||||||
}
|
}
|
||||||
@@ -1038,6 +1039,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
|
|||||||
val operatorName = FirOperationNameConventions.ASSIGNMENTS.getValue(augmentedArraySetCall.operation)
|
val operatorName = FirOperationNameConventions.ASSIGNMENTS.getValue(augmentedArraySetCall.operation)
|
||||||
|
|
||||||
val firstCalls = with(augmentedArraySetCall.setGetBlock.statements.last() as FirFunctionCall) setCall@{
|
val firstCalls = with(augmentedArraySetCall.setGetBlock.statements.last() as FirFunctionCall) setCall@{
|
||||||
|
(annotations as MutableList<FirAnnotation>) += augmentedArraySetCall.annotations
|
||||||
buildList {
|
buildList {
|
||||||
add(this@setCall)
|
add(this@setCall)
|
||||||
with(arguments.last() as FirFunctionCall) plusCall@{
|
with(arguments.last() as FirFunctionCall) plusCall@{
|
||||||
|
|||||||
Reference in New Issue
Block a user