事象
gradleによるJavaDoc生成の際、Lombokの@Builder
を使ったクラスに対して、「エラー:シンボルを見つけられません」が発生しました。
Foo.java:30: エラー: シンボルを見つけられません
FooBuilder bar() {
シンボル: クラス FooBuilder
場所: クラス Foo
条件
Lombokの@Builder
で自動生成されたクラスを戻り値とするメソッドを定義した状態で、JavaDoc生成タスクを実行したところ、上記エラーが発生しました。
@Builder
class Foo {
FooBuilder bar() { // FooBuilderはLombokが自動生成するクラス
// 略
}
}
解決策
Lombokが自動生成するビルダクラスと同名のクラスを置いておくことで、エラーを回避できました。
クラスの中身は空でOKです。
@Builder
class Foo {
staic class FooBuilder {} // ← Lombokが自動生成するビルダクラスと同名のクラスを置いておく(中身は空でOK)
FooBuilder bar() {
// 略
}
}
原因
深追いできていませんが、JavaDoc生成ランナーの不具合でしょうか。
参考
Lombokの拡張
上記記事の回答内にSide Noteとして記載がありますが、Lombokが自動生成するクラスと同名のクラスにメソッド等追加すると、うまくマージして貰えるようです。
これにより、Lombokで生成されるBuilderの機能拡張を行うことが可能です。
@Builder
class Foo {
staic class FooBuilder {
FooBuilder hoge() { // Lombokが自動生成するビルダクラスにカスタムメソッドを追加可能
// 略
}
}
FooBuilder bar() {
return Foo.builder().hoge(); // カスタムメソッド呼び出し
}
}