Files
kotlin-fork/compiler/testData/codegen/box/annotations/javaTargetOnPrimaryCtorParameter.kt
T
2023-08-31 13:12:15 +00:00

61 lines
1.5 KiB
Kotlin
Vendored

// WITH_STDLIB
// WITH_REFLECT
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// TARGET_BACKEND: JVM_IR
// FIR_DUMP
// DUMP_IR
// FILE: NoTarget.java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface NoTarget {
}
// FILE: PropValueField.java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface PropValueField {
}
// FILE: ParameterOnly.java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface ParameterOnly {
}
// FILE: FieldOnly.java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface FieldOnly {
}
// FILE: test.kt
import kotlin.reflect.full.declaredMemberProperties
class Foo(
@NoTarget
@PropValueField
@ParameterOnly
@FieldOnly
var param: Int
)
fun box(): String {
val clazz = Foo::class
val parameterAnnotations = clazz.constructors.single().parameters.single().annotations.map { it.annotationClass.simpleName ?: "" }.toSet()
val fieldAnnotations = Foo::class.java.getDeclaredField("param").annotations.map { it.annotationClass.simpleName ?: "" }.toSet()
if (parameterAnnotations != setOf("NoTarget", "PropValueField", "ParameterOnly")) return "Parameters:" + parameterAnnotations
if (fieldAnnotations != setOf("FieldOnly")) return "Field:" + fieldAnnotations
return "OK"
}