FIR Java: handle primitive arrays in annotations correctly
This commit is contained in:
@@ -233,17 +233,7 @@ private fun JavaAnnotationArgument.toFirExpression(
|
|||||||
// TODO: this.name
|
// TODO: this.name
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is JavaLiteralAnnotationArgument -> {
|
is JavaLiteralAnnotationArgument -> {
|
||||||
when (val value = value) {
|
value.createConstant(session)
|
||||||
is ByteArray -> value.toList().createArrayOfCall(session, IrConstKind.Byte)
|
|
||||||
is ShortArray -> value.toList().createArrayOfCall(session, IrConstKind.Short)
|
|
||||||
is IntArray -> value.toList().createArrayOfCall(session, IrConstKind.Int)
|
|
||||||
is LongArray -> value.toList().createArrayOfCall(session, IrConstKind.Long)
|
|
||||||
is CharArray -> value.toList().createArrayOfCall(session, IrConstKind.Char)
|
|
||||||
is FloatArray -> value.toList().createArrayOfCall(session, IrConstKind.Float)
|
|
||||||
is DoubleArray -> value.toList().createArrayOfCall(session, IrConstKind.Double)
|
|
||||||
is BooleanArray -> value.toList().createArrayOfCall(session, IrConstKind.Boolean)
|
|
||||||
else -> value.createConstant(session)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is JavaArrayAnnotationArgument -> FirArrayOfCallImpl(session, null).apply {
|
is JavaArrayAnnotationArgument -> FirArrayOfCallImpl(session, null).apply {
|
||||||
for (element in getElements()) {
|
for (element in getElements()) {
|
||||||
@@ -299,6 +289,14 @@ internal fun Any?.createConstant(session: FirSession): FirExpression {
|
|||||||
is Double -> FirConstExpressionImpl(session, null, IrConstKind.Double, this)
|
is Double -> FirConstExpressionImpl(session, null, IrConstKind.Double, this)
|
||||||
is Boolean -> FirConstExpressionImpl(session, null, IrConstKind.Boolean, this)
|
is Boolean -> FirConstExpressionImpl(session, null, IrConstKind.Boolean, this)
|
||||||
is String -> FirConstExpressionImpl(session, null, IrConstKind.String, this)
|
is String -> FirConstExpressionImpl(session, null, IrConstKind.String, this)
|
||||||
|
is ByteArray -> toList().createArrayOfCall(session, IrConstKind.Byte)
|
||||||
|
is ShortArray -> toList().createArrayOfCall(session, IrConstKind.Short)
|
||||||
|
is IntArray -> toList().createArrayOfCall(session, IrConstKind.Int)
|
||||||
|
is LongArray -> toList().createArrayOfCall(session, IrConstKind.Long)
|
||||||
|
is CharArray -> toList().createArrayOfCall(session, IrConstKind.Char)
|
||||||
|
is FloatArray -> toList().createArrayOfCall(session, IrConstKind.Float)
|
||||||
|
is DoubleArray -> toList().createArrayOfCall(session, IrConstKind.Double)
|
||||||
|
is BooleanArray -> toList().createArrayOfCall(session, IrConstKind.Boolean)
|
||||||
null -> FirConstExpressionImpl(session, null, IrConstKind.Null, null)
|
null -> FirConstExpressionImpl(session, null, IrConstKind.Null, null)
|
||||||
|
|
||||||
else -> FirErrorExpressionImpl(session, null, "Unknown value in JavaLiteralAnnotationArgument: $this")
|
else -> FirErrorExpressionImpl(session, null, "Unknown value in JavaLiteralAnnotationArgument: $this")
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@R|test/Anno|(bytes = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [B@1ab59349), shorts = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [S@3a9e0124), ints = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [I@472931b8), longs = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [J@44b10709), chars = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [C@72a8fb0d), floats = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [F@3875435d), doubles = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [D@365f111a), booleans = ERROR_EXPR(Unknown value in JavaLiteralAnnotationArgument: [Z@7a1ac197)) public final class Klass : R|kotlin/Any| {
|
@R|test/Anno|(bytes = <implicitArrayOf>(Byte(42), Byte(-1)), shorts = <implicitArrayOf>(Short(-42), Short(0)), ints = <implicitArrayOf>(Int(42), Int(239)), longs = <implicitArrayOf>(Long(42), Long(239)), chars = <implicitArrayOf>(Char(a), Char(Z)), floats = <implicitArrayOf>(Float(2.72), Float(0.0)), doubles = <implicitArrayOf>(Double(42.0), Double(-3.14)), booleans = <implicitArrayOf>(Boolean(true), Boolean(false))) public final class Klass : R|kotlin/Any| {
|
||||||
public constructor(): R|test/Klass|
|
public constructor(): R|test/Klass|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user