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?

More than 3 years have passed since last update.

JavaDoc生成の際、Lombokの@Builderを使うと「エラー:シンボルを見つけられません」が発生する

Posted at

事象

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(); // カスタムメソッド呼び出し
  }
}
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?