FIR Java: handle primitive arrays in annotations correctly

This commit is contained in:
Mikhail Glukhikh
2019-04-25 19:50:33 +03:00
parent be18134270
commit d1d6b8b77a
2 changed files with 10 additions and 12 deletions
@@ -233,17 +233,7 @@ private fun JavaAnnotationArgument.toFirExpression(
// TODO: this.name
return when (this) {
is JavaLiteralAnnotationArgument -> {
when (val value = value) {
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)
}
value.createConstant(session)
}
is JavaArrayAnnotationArgument -> FirArrayOfCallImpl(session, null).apply {
for (element in getElements()) {
@@ -299,6 +289,14 @@ internal fun Any?.createConstant(session: FirSession): FirExpression {
is Double -> FirConstExpressionImpl(session, null, IrConstKind.Double, this)
is Boolean -> FirConstExpressionImpl(session, null, IrConstKind.Boolean, 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)
else -> FirErrorExpressionImpl(session, null, "Unknown value in JavaLiteralAnnotationArgument: $this")
@@ -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|
}