Java用のクロスクラス対応の拡張可能な静的解析ツール?
-
07-07-2019 - |
質問
マルチスレッドJavaプログラムの注釈付きでエラーを検出するためのルールを記述しようとしています。おもちゃの例として、@ ThreadSafeで注釈が付けられたメソッドが、同期なしでそのような注釈なしでメソッドを呼び出すかどうかを検出したいと思います。このようなテストを作成できるツールを探しています。
CheckStyleやPMDなどのソースアナライザーを調べましたが、クラス間の分析機能は実際にはありません。 FindBugsやJLintなどのバイトコードアナライザーを拡張するのはかなり難しいようです。
さらに簡単なものの解決策に落ち着きますが、同じ困難を提起します。各オーバーライドメソッドに@Overrideアノテーションが付けられているかどうかをチェックするカスタムルールを作成します。
解決
FindBugs を試しましたか?実際には、スレッドセーフのための注釈( Java同時実行の実践で使用されているものと同じ)。また、独自のカスタムルールを作成することもできます。クラス間分析を行うことができるかどうかはわかりませんが、そう信じています。
Peter Ventjeer には、同時性チェックツール(ASMを使用)がこのようなものを検出します。彼がそれを公開したかどうかはわかりませんが、彼はあなたを助けることができるかもしれません。
そして Coverityのスレッドセーフのための静的/動的分析ツールは、このようなチェックを行うと信じています。
他のヒント
PMDでのクラス間分析を実行できます(ただし、この特定の目的に使用しました)。このビジターパターンを使用して文書化することは可能だと思いますが、詳細はお任せします。
注釈をチェックする簡単なツールはapt( http: //java.sun.com/j2se/1.5.0/docs/guide/apt/ もjavax.annotation.processingのJava 6 APIの一部ですが、これには型情報しかありません(つまり、見つけることができませんでした) javax.lang.model apiを使用して継承階層を取得する簡単な方法ですが、クラスをロードできる場合は、リフレクションを使用してその情報を取得できます。
javap +正規表現(Perlなど)を試してください