桜技録

🐈🐈🐈🐈🐘

SpotBugsでGeneratedアノテーションがついたクラスやメソッドを除外できるようになる

アノテーション・プロセッサ等のツールで自動生成したコードは静的コード解析の対象から外したいもの。

従来SpotBugsの利用者はパッケージやクラスに関する 除外フィルタ の機能を使ってこれに対応してきた。

<!-- これまでの手法 -->
<FindBugsFilter>
  <Match>
    <Package name="com.example.hoge.gen"/>
  </Match>
  <Match>
    <Class name="~.*Entity"/>
  </Match>
</FindBugsFilter>

しかしこの手法では自動生成する成果物のパッケージやクラス名に一定の制約が生じてしまうのは避けられず、またプロジェクトごとに異なる成果物の名前に応じてフィルタを調整しなくてはいけなかった。

その状況が次のSpotBugs 4.8.0(仮)のリリースで変わる。

github.com

新しく AnnotationMatcher なるものを追加するPRがマージされており、「特定のパターンのアノテーションが付いたクラス、メソッド、フィールドを解析対象外にする」といったルールが設定できるようになった。

具体的にはこんな感じ。

<!-- これからの手法 -->
<FindBugsFilter>
  <Match>
    <Annotation name="~.*\.Generated"/>
  </Match>
</FindBugsFilter>

イマドキのコード生成ツールはFQCNはさまざまであるがなにかしらの Generated アノテーションを付けてコード出力するのが常識だと言っていい。

上記のフィルタならばそれら Generated アノテーション付きのコードを解析対象から除外しつつ前述の問題点はすべて解消できる。

新規プロジェクト用のテンプレートに是非反映させたくなるフィルタではないだろうか。

なお次回リリースについてはこちらで議論されている。特定の日付は出てないけれどリリース手順の確認などがなされておりリリースは近い予感。

github.com