diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 9ee33ebb465..6147bcce080 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -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") diff --git a/compiler/fir/resolve/testData/loadCompiledKotlin/annotations/PrimitiveArrayArguments.txt b/compiler/fir/resolve/testData/loadCompiledKotlin/annotations/PrimitiveArrayArguments.txt index a0407c8863d..a081c425766 100644 --- a/compiler/fir/resolve/testData/loadCompiledKotlin/annotations/PrimitiveArrayArguments.txt +++ b/compiler/fir/resolve/testData/loadCompiledKotlin/annotations/PrimitiveArrayArguments.txt @@ -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 = (Byte(42), Byte(-1)), shorts = (Short(-42), Short(0)), ints = (Int(42), Int(239)), longs = (Long(42), Long(239)), chars = (Char(a), Char(Z)), floats = (Float(2.72), Float(0.0)), doubles = (Double(42.0), Double(-3.14)), booleans = (Boolean(true), Boolean(false))) public final class Klass : R|kotlin/Any| { public constructor(): R|test/Klass| }