社内共有用に英語化する前の下書き
どっちのメソッドを使うの?
カスタムチェックを作ろうと FindBugs のお奨めクラスを継承すると visitHoge 系と visit(Hoge) 系メソッドがある事に気が付く。
どちらのメソッドを使うべきなのだろうか?
推奨
visit(Hoge) 系メソッドがおススメ
全体像
visitHoge 系メソッドは FindBugs が利用している Apache bcel の Visitor インタフェースが宣言していて、解析対象のコードの各エレメントをウォークスルーするのもこちら側のメソッドになる。
visit(Hoge) 系メソッドは FindBugs 側のお奨めクラスの根っこの方にいる BetterVisitor(implement Visitor) が宣言しているメソッドで、visitHoge メソッドの呼び出しを visit(Hoge) へと振り向けてくれている。
推奨する理由
FindBugs のウォークスルーは Visitor 側、つまりお奨めクラスの親クラスで実装されている。
そのため、visitHoge 系にはうっかり super.visitHoge() を忘れるとそこで動きが詰まってしまうものがあるのだが、ウォークスルーが途中で止まっていること、その理由が super.visitHoge() の呼び忘れというのは結構見つけにくい。
親クラスの visit(Hoge) 側にも visit(Code) ぐらいは実装があるが、visit(Code) はほとんど自分で実装する事のないメソッド(たぶん)なので、visit(Hoge) 系を使っていれば事故率がだいぶ下がる。