The value parameter annotations without an explicit target are applied only to the parameter itself until Kotlin 2.1.20.
For annotations applicable to both parameters and fields or properties, this behavior might
be unintended when the annotation is used on a val or var constructor parameter.
Example:
class Example(
@Param val foo: String,
@ParamField val bar: String, // the field is not annotated, only the parameter is
@ParamProperty val baz: String, // the property is not annotated, only the parameter is
@ParamProperty boo: String,
)
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class Param
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD)
annotation class ParamField
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class ParamProperty
After the quick-fix is applied:
class Example(
@Param val foo: String,
@field:ParamField val bar: String,
@property:ParamProperty val baz: String,
@ParamProperty boo: String,
)
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class Param
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD)
annotation class ParamField
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class ParamProperty