91e96e9f31
^KT-61514
61 lines
1.5 KiB
Kotlin
Vendored
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"
|
|
}
|