Lombokを使用したJavaアプリケーションで、
遅れてFindbugsを導入したところ、以下警告が大量に出力されて、
どうしようかと思い、最終的に抑制した結果をメモします。

参考サイト

警告の内容

以下の警告がLombokを使用しているデータクラスで出力されます。
他、NetBeansで自動生成したJPAのEntityクラスでも大量に

xyz.monotalk.xxx.Video.getDateFound() は、Video.dateFound を返すことによって内部表現を暴露するかもしれません。 [xyz.monotalk.xxx.Video] 該当箇所 Video.java:[line 52] EI_EXPOSE_REP
xyz.monotalk.xxx.Video.setDateFound(Date) は、Video.dateFound の中に外部の可変オブジェクトを格納することによって内部表現を暴露するかもしれません。 [xyz.monotalk.xxx.Video] 該当箇所 Video.java:[line 40] EI_EXPOSE_REP2

参考サイトを見ていた感じだと、

  • 防御的なコピーをしてください。という警告

  • Lombokは「EI_EXPOSE_REP」、「EI_EXPOSE_REP2」を考慮して、
    getter出力するのは無理だからやらない?って言っている

  • fingbugsは、アノテーションかexclude.xmlで警告を抑制できる。

という雰囲気が伝わってきました。
Lobmobのコードは、アノテーション内に、findbugsの警告抑制をする指定ができるようですが、 JPAはNetBeansでの自動生成コードの話なので、警告抑制はできない。
ようなので、xmlで対象をフィルタリングすることにしました。

対処方法

findbugs-exculde.xmlを作成し、対象のコードのいるパッケージ配下の警告を抑制しました。

<FindBugsFilter>
    <!-- dto パッケージ階層内の EI_EXPOSE_REP,EI_EXPOSE_REP2を除去 -->
    <Match>
        <Package name="~xyz\.monotalk\.xxx\.dto\.*"/>
        <Bug pattern="EI_EXPOSE_REP, EI_EXPOSE_REP2" />
    </Match>
</FindBugsFilter>

以上です。

コメント