wrongwrongな開発日記

しんまいさんの忘備録

【Kotlin】ありえないエラーが出てハマった話【BeanValidation】

以下のように、「エラー条件を満たした場合、値をメッセージに入れて返す」的な処理をクラス内に実装していたところ、通常では考えられないバグが出てハマりました。

@Null(message = "\${validatedValue}は異常値です。")
fun getHoge(): String? = when (cond) {
    true -> hoge.value
    false -> null
}

エラー内容

エラー内容は以下の通りです。

  • condを満たしていないのにアノテーションが反応する
  • ${validatedValue}に入る値がhoge.valueじゃない(バリデーション対象オブジェクトのクラス名が入っていた)

対処法

メソッド定義の順番を変えた所治りました。

原因の考察

SpringBootValidatorKotlinコンパイル結果等々絡む要素が多すぎて特定はできませんでした。
一応デコンパイル結果も見ましたが、特に何も問題無いように見えました。

同名のプライベートフィールドやら拡張関数やら色々と入っているファイルだったので、Kotlinによるゲッター生成関連のどこかでコンパイルが壊れるのかなと思っています。