FindBugsをMavenizeしたツワモノがいるのでありがたくeclipse:eclipseしてコードを読んだ。srcとsrc/javaの両方がsource folderとして認識されているのでそこだけ手直ししてやる必要があったが、概ね良好。
"findbugs.execplan.debug"みたいな環境変数を指定してやるとデバッグモードになる、というのは前から知ってたけど細かい処理の流れや登場人物について調べるのはコレが初めて。複雑だろうとは思ってたけど予想以上に汚かった。
起動してからの流れ
edu.umd.cs.findbugs.LaunchAppropriateUI
がmain- Headless環境なら
edu.umd.cs.findbugs.FindBugs2.main()
を蹴る - 解析処理
- FindBugs2クラスのインスタンス生成
FindBugs.processCommandLine()
で引数をparseFindBugs.runMain()
で解析を開始FindBugs2#execute()
を呼び出して解析実行、レポートも生成する(複雑)
- 解析結果を標準エラー出力に出す(
FindBugs.runMain()
)- bugCount, missingClassCount, errorCountをFindBugs2のインスタンスから取り出す
- システムの終了
- 必要に応じてバグの有無、エラーの有無などからexitCodeを算出
System.exit(int)
の呼び出し- なんとここで呼び出すとは
鍵っぽいインタフェース郡
Project
クラスパスとか解析に関連する情報が入ってる。FindBugs2#buildClassPath()
を見る限り、getFileArray()が解析対象、getAuxClasspathEntryList()が依存先を意味すると思われる。
ExecutionPlan
実行するDetectorないしその実行順を決める。AnalysisPassもあわせて読むこと。
そのうち更新します。