Psi2ir: load single-value Java array annotation arguments correctly

#KT-47467 Fixed
This commit is contained in:
Alexander Udalov
2021-07-02 21:01:05 +02:00
parent 269f83f86e
commit 113632c49c
10 changed files with 374 additions and 1 deletions
@@ -0,0 +1,39 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME
// FILE: A.java
public class A {
@Annos(value = @Anno(token = "OK"))
@Strings(value = "OK")
@Ints(value = 42)
@Enums(value = E.EA)
@Classes(value = double.class)
public void test() {}
}
// FILE: box.kt
import kotlin.reflect.KClass
import kotlin.test.assertEquals
annotation class Anno(val token: String)
enum class E { EA }
annotation class Annos(val value: Array<Anno>)
annotation class Strings(val value: Array<String>)
annotation class Ints(val value: IntArray)
annotation class Enums(val value: Array<E>)
annotation class Classes(val value: Array<KClass<*>>)
class C : A()
fun box(): String {
val annotations = C::class.java.getMethod("test").annotations.toList()
assertEquals("OK", annotations.filterIsInstance<Annos>().single().value.single().token)
assertEquals("OK", annotations.filterIsInstance<Strings>().single().value.single())
assertEquals(42, annotations.filterIsInstance<Ints>().single().value.single())
assertEquals(E.EA, annotations.filterIsInstance<Enums>().single().value.single())
assertEquals(Double::class, annotations.filterIsInstance<Classes>().single().value.single())
return "OK"
}