以下のように、「エラー条件を満たした場合、値をメッセージに入れて返す」的な処理をクラス内に実装していたところ、通常では考えられないバグが出てハマりました。
@Null(message = "\${validatedValue}は異常値です。") fun getHoge(): String? = when (cond) { true -> hoge.value false -> null }
エラー内容
エラー内容は以下の通りです。
condを満たしていないのにアノテーションが反応する${validatedValue}に入る値がhoge.valueじゃない(バリデーション対象オブジェクトのクラス名が入っていた)
対処法
メソッド定義の順番を変えた所治りました。
原因の考察
SpringBootのValidator、Kotlinのコンパイル結果等々絡む要素が多すぎて特定はできませんでした。
一応デコンパイル結果も見ましたが、特に何も問題無いように見えました。
同名のプライベートフィールドやら拡張関数やら色々と入っているファイルだったので、Kotlinによるゲッター生成関連のどこかでコンパイルが壊れるのかなと思っています。