// !LANGUAGE: +RepeatableAnnotations // TARGET_BACKEND: JVM_IR // JVM_TARGET: 1.8 // FULL_JDK // WITH_REFLECT // In light analysis mode, repeated annotations are not wrapped into the container. This is by design, so that in kapt stubs repeated // annotations will be visible unwrapped. // IGNORE_LIGHT_ANALYSIS // FILE: box.kt import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotations import kotlin.reflect.full.hasAnnotation @A("O") @A("") @A("K") fun f() {} fun box(): String { val element = ::f if (element.hasAnnotation()) return "Fail hasAnnotation $element" val find = element.findAnnotation() if (find != null) return "Fail findAnnotation $element: $find" val all = (element.annotations.single() as A.Container).value.asList() val findAll = element.findAnnotations() if (all != findAll) throw AssertionError("Fail findAnnotations $element: $all != $findAll") return all.fold("") { acc, it -> acc + it.value } } // FILE: A.java import java.lang.annotation.*; @Repeatable(A.Container.class) @Retention(RetentionPolicy.RUNTIME) public @interface A { String value(); @Retention(RetentionPolicy.RUNTIME) public @interface Container { A[] value(); } }