import java.lang.annotation.Retention import java.lang.annotation.RetentionPolicy Retention(RetentionPolicy.RUNTIME) annotation class Ann(vararg val p: Int) Ann() class MyClass1 Ann(1) class MyClass2 Ann(1, 2) class MyClass3 Ann(*intArray()) class MyClass4 Ann(*intArray(1)) class MyClass5 Ann(*intArray(1, 2)) class MyClass6 Ann(p = 1) class MyClass7 Ann(p = *intArray()) class MyClass8 Ann(p = *intArray(1)) class MyClass9 Ann(p = *intArray(1, 2)) class MyClass10 fun box(): String { test(javaClass(), "") test(javaClass(), "1") test(javaClass(), "12") test(javaClass(), "") test(javaClass(), "1") test(javaClass(), "12") test(javaClass(), "1") test(javaClass(), "") test(javaClass(), "1") test(javaClass(), "12") return "OK" } fun test(klass: Class<*>, expected: String) { val ann = klass.getAnnotation(javaClass()) if (ann == null) throw AssertionError("fail: cannot find Ann on ${klass}") var result = "" for (i in ann.p) { result += i } if (result != expected) { throw AssertionError("fail: expected = ${expected}, actual = ${result}") } }