デフォルトターゲットが予期せず望ましくない形になる可能性がある、明示的なターゲットがない値パラメーターのアノテーションが使用されていることを報告します。

明示的なターゲットがない値パラメーターのアノテーションは、Kotlin 2.1.20 まではパラメーター自体にのみ適用されます。 パラメーターとフィールド、またはプロパティの両方に適用可能なアノテーションを val または var コンストラクターパラメーターに使用している場合、この動作は意図しないものである可能性があります。

例:


class Example(
    @Param val foo: String,
    @ParamField val bar: String, // フィールドにはアノテーションが付いておらず、パラメーターのみに付いています
    @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

クイックフィックス適用後:


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