diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index b5423e9b0e2..c7b63639b41 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -40147,6 +40147,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt"); } + @Test + @TestMetadata("kotlinAnnotationOnType.kt") + public void testKotlinAnnotationOnType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotationOnType.kt"); + } + @Test @TestMetadata("kt49335.kt") public void testKt49335() throws Exception { diff --git a/compiler/testData/codegen/box/reflection/annotations/repeatable/jvmRepeatableKotlinAnnotation.kt b/compiler/testData/codegen/box/reflection/annotations/repeatable/jvmRepeatableKotlinAnnotation.kt index b544b4478b8..f8c528427ff 100644 --- a/compiler/testData/codegen/box/reflection/annotations/repeatable/jvmRepeatableKotlinAnnotation.kt +++ b/compiler/testData/codegen/box/reflection/annotations/repeatable/jvmRepeatableKotlinAnnotation.kt @@ -4,7 +4,7 @@ // FULL_JDK // WITH_REFLECT -// Android doesn't have @Repeatable, so findAnnotations can't unpack repeatable annotations. +// Android doesn't have @Repeatable before API level 24, so findAnnotations can't unpack repeatable annotations. // IGNORE_BACKEND: ANDROID import kotlin.reflect.full.findAnnotation diff --git a/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt b/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt index b68e8ca4989..f712be956fd 100644 --- a/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt +++ b/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt @@ -4,9 +4,6 @@ // FULL_JDK // WITH_REFLECT -// Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Native crash''. Check device logcat for details -// IGNORE_BACKEND: ANDROID - import kotlin.annotation.AnnotationTarget.* import kotlin.reflect.KAnnotatedElement import kotlin.reflect.full.findAnnotation @@ -30,7 +27,7 @@ fun check(element: KAnnotatedElement) { } @Repeatable -@Target(CLASS, FUNCTION, PROPERTY, TYPE) +@Target(CLASS, FUNCTION, PROPERTY) annotation class A(val value: String) @A("O") @A("") @A("K") @@ -42,12 +39,9 @@ var p = 1 @A("O") @A("K") class Z -fun g(): @A("O") @A("K") @A("") Unit {} - fun box(): String { check(::f) check(::p) check(Z::class) - check(::g.returnType) return "OK" } diff --git a/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotationOnType.kt b/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotationOnType.kt new file mode 100644 index 00000000000..a1d3dc85cec --- /dev/null +++ b/compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotationOnType.kt @@ -0,0 +1,42 @@ +// !LANGUAGE: +RepeatableAnnotations +// TARGET_BACKEND: JVM_IR +// JVM_TARGET: 1.8 +// FULL_JDK +// WITH_REFLECT + +// Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Native crash''. Check device logcat for details +// Because TYPE_USE is not avaiable before API level 26 +// IGNORE_BACKEND: ANDROID + +import kotlin.annotation.AnnotationTarget.* +import kotlin.reflect.KAnnotatedElement +import kotlin.reflect.full.findAnnotation +import kotlin.reflect.full.findAnnotations +import kotlin.reflect.full.hasAnnotation + +fun check(element: KAnnotatedElement) { + if (!element.hasAnnotation()) throw AssertionError("Fail hasAnnotation $element") + + val find = element.findAnnotation() + if (find == null || find.value != "O") throw AssertionError("Fail findAnnotation $element: $find") + + val all = element.annotations + val findAll = element.findAnnotations() + if (all != findAll) throw AssertionError("Fail findAnnotations $element: $all != $findAll") + + if (all.any { it !is A }) + throw AssertionError("Fail 1 $element: $all") + if (all.fold("") { acc, it -> acc + (it as A).value } != "OK") + throw AssertionError("Fail 2 $element: $all") +} + +@Repeatable +@Target(CLASS, FUNCTION, PROPERTY, TYPE) +annotation class A(val value: String) + +fun g(): @A("O") @A("K") @A("") Unit {} + +fun box(): String { + check(::g.returnType) + return "OK" +} diff --git a/compiler/testData/codegen/box/reflection/annotations/repeatable/kt49335.kt b/compiler/testData/codegen/box/reflection/annotations/repeatable/kt49335.kt index f6c0e875b36..fbf494a7411 100644 --- a/compiler/testData/codegen/box/reflection/annotations/repeatable/kt49335.kt +++ b/compiler/testData/codegen/box/reflection/annotations/repeatable/kt49335.kt @@ -4,7 +4,7 @@ // FULL_JDK // WITH_REFLECT -// Android doesn't have @Repeatable, so findAnnotations can't unpack repeatable annotations. +// Android doesn't have @Repeatable before API level 24, so findAnnotations can't unpack repeatable annotations. // IGNORE_BACKEND: ANDROID // FILE: A.kt diff --git a/compiler/testData/codegen/box/reflection/annotations/repeatable/nonRepeatedAnnotationWithItsContainer.kt b/compiler/testData/codegen/box/reflection/annotations/repeatable/nonRepeatedAnnotationWithItsContainer.kt index 1e39de487a4..169a95d0c7d 100644 --- a/compiler/testData/codegen/box/reflection/annotations/repeatable/nonRepeatedAnnotationWithItsContainer.kt +++ b/compiler/testData/codegen/box/reflection/annotations/repeatable/nonRepeatedAnnotationWithItsContainer.kt @@ -4,7 +4,7 @@ // FULL_JDK // WITH_REFLECT -// Android doesn't have @Repeatable. +// Android doesn't have @Repeatable before API level 24. // IGNORE_BACKEND: ANDROID package test diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 401b8ec9871..a92f0dddbc2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -40147,6 +40147,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotation.kt"); } + @Test + @TestMetadata("kotlinAnnotationOnType.kt") + public void testKotlinAnnotationOnType() throws Exception { + runTest("compiler/testData/codegen/box/reflection/annotations/repeatable/kotlinAnnotationOnType.kt"); + } + @Test @TestMetadata("kt49335.kt") public void testKt49335() throws Exception {