FIR2IR: pass annotationMode through arrayOf calls properly
#KT-50163 Fixed
This commit is contained in:
@@ -357,19 +357,19 @@ class Fir2IrVisitor(
|
||||
endOffset,
|
||||
varargArgumentsExpression.typeRef.toIrType(),
|
||||
varargArgumentsExpression.varargElementType.toIrType(),
|
||||
varargArgumentsExpression.arguments.map { it.convertToIrVarargElement() }
|
||||
varargArgumentsExpression.arguments.map { it.convertToIrVarargElement(annotationMode = false) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirExpression.convertToIrVarargElement(): IrVarargElement =
|
||||
private fun FirExpression.convertToIrVarargElement(annotationMode: Boolean): IrVarargElement =
|
||||
if (this is FirSpreadArgumentExpression || this is FirNamedArgumentExpression && this.isSpread) {
|
||||
IrSpreadElementImpl(
|
||||
source?.startOffset ?: UNDEFINED_OFFSET,
|
||||
source?.endOffset ?: UNDEFINED_OFFSET,
|
||||
convertToIrExpression(this)
|
||||
convertToIrExpression(this, annotationMode)
|
||||
)
|
||||
} else convertToIrExpression(this)
|
||||
} else convertToIrExpression(this, annotationMode)
|
||||
|
||||
private fun convertToIrCall(functionCall: FirFunctionCall, annotationMode: Boolean): IrExpression {
|
||||
val explicitReceiverExpression = convertToIrReceiverExpression(
|
||||
@@ -535,8 +535,12 @@ class Fir2IrVisitor(
|
||||
}
|
||||
else -> {
|
||||
val unwrappedExpression = expression.unwrapArgument()
|
||||
if (annotationMode && unwrappedExpression is FirFunctionCall) {
|
||||
convertToIrCall(unwrappedExpression, annotationMode)
|
||||
if (annotationMode) {
|
||||
when (unwrappedExpression) {
|
||||
is FirFunctionCall -> convertToIrCall(unwrappedExpression, annotationMode)
|
||||
is FirArrayOfCall -> convertToArrayOfCall(unwrappedExpression, annotationMode)
|
||||
else -> expression.accept(this, null) as IrExpression
|
||||
}
|
||||
} else {
|
||||
expression.accept(this, null) as IrExpression
|
||||
}
|
||||
@@ -1113,7 +1117,7 @@ class Fir2IrVisitor(
|
||||
classifierStorage.getIrClassSymbol(it)
|
||||
}
|
||||
|
||||
override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Any?): IrElement {
|
||||
private fun convertToArrayOfCall(arrayOfCall: FirArrayOfCall, annotationMode: Boolean): IrVararg {
|
||||
return arrayOfCall.convertWithOffsets { startOffset, endOffset ->
|
||||
lateinit var elementType: IrType
|
||||
lateinit var arrayType: IrType
|
||||
@@ -1132,11 +1136,15 @@ class Fir2IrVisitor(
|
||||
startOffset, endOffset,
|
||||
type = arrayType,
|
||||
varargElementType = elementType,
|
||||
elements = arrayOfCall.arguments.map { it.convertToIrVarargElement() }
|
||||
elements = arrayOfCall.arguments.map { it.convertToIrVarargElement(annotationMode) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Any?): IrElement {
|
||||
return convertToArrayOfCall(arrayOfCall, annotationMode = false)
|
||||
}
|
||||
|
||||
override fun visitAugmentedArraySetCall(augmentedArraySetCall: FirAugmentedArraySetCall, data: Any?): IrElement {
|
||||
return augmentedArraySetCall.convertWithOffsets { startOffset, endOffset ->
|
||||
IrErrorCallExpressionImpl(
|
||||
|
||||
+6
@@ -16839,6 +16839,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/fir/ColorValuePanel.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("complexAnnotations.kt")
|
||||
public void testComplexAnnotations() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/fir/complexAnnotations.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ConstValAccess.kt")
|
||||
public void testConstValAccess() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user