eee66ab43f
If an annotation doesn't specify an explicit use-site target, previously it was added to both, the primary constructor value parameter and the property in the FIR. Then, in FIR2IR, only the "correct" one was added to the IR. Move up the deduplication logic into the frontend. ^KT-56177 Fixed
82 lines
5.8 KiB
Plaintext
Vendored
82 lines
5.8 KiB
Plaintext
Vendored
FILE: targetOnPrimaryCtorParameter.kt
|
|
public final annotation class NoTarget : R|kotlin/Annotation| {
|
|
public constructor(): R|NoTarget| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
@R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY|, R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FIELD|)) public final annotation class PropValueField : R|kotlin/Annotation| {
|
|
public constructor(): R|PropValueField| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
@R|kotlin/annotation/Target|(allowedTargets = vararg(allowedTargets = <implicitArrayOf>(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY|))) public final annotation class PropertyOnly : R|kotlin/Annotation| {
|
|
public constructor(): R|PropertyOnly| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
@R|kotlin/annotation/Target|(allowedTargets = vararg(allowedTargets = <implicitArrayOf>(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|))) public final annotation class ParameterOnly : R|kotlin/Annotation| {
|
|
public constructor(): R|ParameterOnly| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
@R|kotlin/annotation/Target|(allowedTargets = vararg(allowedTargets = *<implicitArrayOf>(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FIELD|))) public final annotation class FieldOnly : R|kotlin/Annotation| {
|
|
public constructor(): R|FieldOnly| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
@R|kotlin/annotation/Target|(allowedTargets = vararg(*<implicitArrayOf>(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY|))) public final annotation class PropertyOnly2 : R|kotlin/Annotation| {
|
|
public constructor(): R|PropertyOnly2| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
}
|
|
public final class Foo : R|kotlin/Any| {
|
|
public constructor(@R|NoTarget|() @R|PropValueField|() @R|ParameterOnly|() param: R|kotlin/Int|): R|Foo| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
@R|PropertyOnly|() @R|PropertyOnly2|() @R|FieldOnly|() public final var param: R|kotlin/Int| = R|<local>/param|
|
|
public get(): R|kotlin/Int|
|
|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
|
|
|
|
}
|
|
public final fun box(): R|kotlin/String| {
|
|
lval clazz: R|kotlin/reflect/KClass<Foo>| = <getClass>(Q|Foo|)
|
|
lval parameterAnnotations: R|kotlin/collections/Set<kotlin/String>| = R|<local>/clazz|.R|SubstitutionOverride<kotlin/reflect/KClass.constructors: R|kotlin/collections/Collection<kotlin/reflect/KFunction<Foo>>|>|.R|kotlin/collections/single|<R|kotlin/reflect/KFunction<Foo>|>().R|SubstitutionOverride<kotlin/reflect/KFunction.parameters: R|kotlin/collections/List<kotlin/reflect/KParameter>|>|.R|kotlin/collections/single|<R|kotlin/reflect/KParameter|>().R|kotlin/reflect/KAnnotatedElement.annotations|.R|kotlin/collections/map|<R|kotlin/Annotation|, R|kotlin/String|>(<L> = map@fun <anonymous>(it: R|kotlin/Annotation|): R|kotlin/String| <inline=Inline, kind=UNKNOWN> {
|
|
^ R|<local>/it|.R|kotlin/jvm/annotationClass|<R|kotlin/Annotation|>.R|SubstitutionOverride<kotlin/reflect/KClass.simpleName: R|kotlin/String?|>| ?: String()
|
|
}
|
|
).R|kotlin/collections/toSet|<R|kotlin/String|>()
|
|
lval propertyAnnotations: R|kotlin/collections/Set<kotlin/String>| = R|<local>/clazz|.R|kotlin/reflect/full/declaredMemberProperties|<R|Foo|>.R|kotlin/collections/single|<R|kotlin/reflect/KProperty1<Foo, *>|>().R|kotlin/reflect/KAnnotatedElement.annotations|.R|kotlin/collections/map|<R|kotlin/Annotation|, R|kotlin/String|>(<L> = map@fun <anonymous>(it: R|kotlin/Annotation|): R|kotlin/String| <inline=Inline, kind=UNKNOWN> {
|
|
^ R|<local>/it|.R|kotlin/jvm/annotationClass|<R|kotlin/Annotation|>.R|SubstitutionOverride<kotlin/reflect/KClass.simpleName: R|kotlin/String?|>| ?: String()
|
|
}
|
|
).R|kotlin/collections/toSet|<R|kotlin/String|>()
|
|
lval fieldAnnotations: R|kotlin/collections/Set<kotlin/String>| = <getClass>(Q|Foo|).R|kotlin/jvm/java|<R|Foo|>.R|SubstitutionOverride<java/lang/Class.getDeclaredField: R|java/lang/reflect/Field!|>|(String(param)).R|java/lang/reflect/AccessibleObject.annotations|.R|kotlin/collections/map|<R|kotlin/Annotation!|, R|kotlin/String|>(<L> = map@fun <anonymous>(it: R|kotlin/Annotation!|): R|kotlin/String| <inline=Inline, kind=UNKNOWN> {
|
|
^ R|<local>/it|.R|kotlin/jvm/annotationClass|<R|kotlin/Annotation!|>.R|SubstitutionOverride<kotlin/reflect/KClass.simpleName: R|kotlin/String?|>| ?: String()
|
|
}
|
|
).R|kotlin/collections/toSet|<R|kotlin/String|>()
|
|
when () {
|
|
!=(R|<local>/parameterAnnotations|, R|kotlin/collections/setOf|<R|kotlin/String|>(vararg(String(NoTarget), String(PropValueField), String(ParameterOnly)))) -> {
|
|
^box String(Parameters:).R|kotlin/String.plus|(R|<local>/parameterAnnotations|.R|kotlin/collections/joinToString|<R|kotlin/String|>())
|
|
}
|
|
}
|
|
|
|
when () {
|
|
!=(R|<local>/propertyAnnotations|, R|kotlin/collections/setOf|<R|kotlin/String|>(vararg(String(PropertyOnly), String(PropertyOnly2)))) -> {
|
|
^box String(Property:).R|kotlin/String.plus|(R|<local>/propertyAnnotations|.R|kotlin/collections/joinToString|<R|kotlin/String|>())
|
|
}
|
|
}
|
|
|
|
when () {
|
|
!=(R|<local>/fieldAnnotations|, R|kotlin/collections/setOf|<R|kotlin/String|>(String(FieldOnly))) -> {
|
|
^box String(Field:).R|kotlin/String.plus|(R|<local>/fieldAnnotations|.R|kotlin/collections/joinToString|<R|kotlin/String|>())
|
|
}
|
|
}
|
|
|
|
^box String(OK)
|
|
}
|