// WITH_REFLECT // TARGET_BACKEND: JVM import java.util.Arrays import kotlin.reflect.KClass import kotlin.reflect.KFunction0 inline fun test(kFunction: KFunction0, test: T.() -> Unit) { val annotation = kFunction.annotations.single() as T annotation.test() } fun check(b: Boolean, message: String) { if (!b) throw RuntimeException(message) } annotation class Foo(val a: FloatArray = [], val b: Array = [], val c: Array> = []) @Foo(a = [1f, 2f, 1 / 0f]) fun test1() {} @Foo(b = ["Hello", ", ", "Kot" + "lin"]) fun test2() {} @Foo(c = [Int::class, Array::class, Foo::class]) fun test3() {} fun box(): String { test(::test1) { check(a.contentEquals(floatArrayOf(1f, 2f, Float.POSITIVE_INFINITY)), "Fail 1: ${a.joinToString()}") } test(::test2) { check(b.contentEquals(arrayOf("Hello", ", ", "Kotlin")), "Fail 2: ${b.joinToString()}") } test(::test3) { check(c.contentEquals(arrayOf(Int::class, Array::class, Foo::class)), "Fail 3: ${c.joinToString()}") } return "OK" }