Fix for varargs as annotation arguments #KT-4326 Fixed
This commit is contained in:
+40
-10
@@ -2,20 +2,50 @@ import java.lang.annotation.Retention
|
||||
import java.lang.annotation.RetentionPolicy
|
||||
|
||||
Retention(RetentionPolicy.RUNTIME)
|
||||
annotation class Ann(val s: String, vararg val p: Int)
|
||||
annotation class Ann(vararg val p: Int)
|
||||
|
||||
Ann("str", 1, 2, 3) class MyClass
|
||||
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 {
|
||||
val ann = javaClass<MyClass>().getAnnotation(javaClass<Ann>())
|
||||
if (ann == null) return "fail: cannot find Ann on MyClass"
|
||||
if (ann.s != "str") return "fail: annotation parameter s should be \"str\""
|
||||
if (ann.p[0] != 1) return "fail: annotation parameter p[0] should be 1"
|
||||
if (ann.p[1] != 2) return "fail: annotation parameter p[1] should be 2"
|
||||
if (ann.p[2] != 3) return "fail: annotation parameter p[2] should be 3"
|
||||
test(javaClass<MyClass1>(), "")
|
||||
test(javaClass<MyClass2>(), "1")
|
||||
test(javaClass<MyClass3>(), "12")
|
||||
|
||||
test(javaClass<MyClass4>(), "")
|
||||
test(javaClass<MyClass5>(), "1")
|
||||
test(javaClass<MyClass6>(), "12")
|
||||
|
||||
test(javaClass<MyClass7>(), "1")
|
||||
|
||||
test(javaClass<MyClass8>(), "")
|
||||
test(javaClass<MyClass9>(), "1")
|
||||
test(javaClass<MyClass10>(), "12")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(box())
|
||||
fun test(klass: Class<*>, expected: String) {
|
||||
val ann = klass.getAnnotation(javaClass<Ann>())
|
||||
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}")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user