1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kotlin 2.2.0で追加されたAnnotation use-site targetsの新しいデフォルトルール

Last updated at Posted at 2025-07-17

Kotlin 2.2.0 で Annotation use-site targets の新しいデフォルトルールが導入され、ビルド時に warning が表示されるようになりました。

Annotation use-site targets とは?

Annotation use-site targets は、
Kotlin のプロパティは一つの宣言で複数の Java 要素 (field、getter、コンストラクタのパラメータなど) にコンパイルされるため、単に Annotation を付けただけではコンパイラがどの要素に適用すればよいか判断できない場合があります。
それを解消するために Annotation use-site targets は Annotation をプロパティのどの要素に適用するかを明示的に指定するものとなっています。

class Example(
    @field:ExampleAnnotation val foo,    // annotate Java field
    @get:ExampleAnnotation val bar,      // annotate Java getter
    @param:ExampleAnnotation val quux)   // annotate Java constructor parameter
)

どうデフォルトが変わるのか

以前は Annotation に対してデフォルトで parampropertyfield のいずれか 1 つのみのターゲットが適用されていましたが、Kotlin 2.2.0 では Annotation に期待される内容に沿ったデフォルトのターゲットが適用される機能が追加されました。

  • param が適用可能な場合は、param ターゲットが使用される
  • property が適用可能な場合は、property ターゲットこちらが使用される
  • field が適用可能で property が適用不可能な場合は、field ターゲットが使用される

例えば以下のようなコードの場合に、

data class User(
    val username: String, 
    @Email val email: String
) {
  @Email val secondaryEmail: String? = null
}

変更前はコンストラクタの @Emailparam が適用されていました。
変更後は実体に合うように paramfield が適用されるようになります。
フィールドの @Email は変更前後で変わりなく field が適用されます。

変更の背景

以前のデフォルトルールでは Annotation に対して開発者の意図したターゲットが適用されていないことがありました。
例えば以下のコードの場合、

data class User(
    val username: String, 
    @Email var email: String
)

@Email は以前のルールの場合には param が適用されており、インスタンス生成時のみしか Annotation の検証がされておらず、プロパティの変更時には検証されていないという問題がありました。

プロジェクトでの対応

この新しいデフォルトルールを適用する場合は -Xannotation-default-target=param-property を設定します。

build.gradle.kts
kotlin {
    compilerOptions {
        freeCompilerArgs.add("-Xannotation-default-target=param-property")
    }
}

以前の動作を使用したい場合は、以下のどちらかで対応します。

  • @param:ExmapleAnnotation のように明示的にターゲットを設定
  • -Xannotation-default-target=first-only を適用してプロジェクト全体で変更前のルールを適用

もっと詳しく知りたい方は KEEP の提案も合わせて参照ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?