4

注釈付きのマルチスレッド Java プログラムでいくつかのエラーを検出するためのルールを作成しようとしています。おもちゃの例として、 @ThreadSafe でアノテーションが付けられたメソッドが、そのようなアノテーションなしで、同期なしでメソッドを呼び出しているかどうかを検出したいと思います。このようなテストを作成できるツールを探しています。

私は CheckStyle や PMD などのソース アナライザーを見てきましたが、実際にはクラス間の分析機能はありません。FindBugs や JLint などのバイトコード アナライザーは、拡張がかなり難しいようです。

私はもっ​​と単純な解決策で解決したいと思いますが、同じ難しさがあります:オーバーライドされた各メソッドに @Override のアノテーションが付けられているかどうかをチェック するカスタムルールを作成することです。

4

4 に答える 4

3

FindBugsを試しましたか? 実際には、スレッドセーフのための一連の注釈をサポートしています ( Java Concurrency in Practice で使用されているものと同じです)。また、独自のカスタム ルールを作成することもできます。クロスクラス分析ができるかどうかはわかりませんが、できると思います。

Peter Ventjeerは、このようなものを検出するための並行性チェック ツール(ASM を使用) を持っています。彼がそれを公にリリースしたかどうかはわかりませんが、彼はあなたを助けることができるかもしれません.

そして、Coverity のスレッド セーフ用の静的/動的解析ツールは、このようなチェックを行っていると思います。

于 2008-11-20T12:33:04.793 に答える
2

PMDでクラス間分析を行うことができます(ただし、この特定の目的で使用したことはありません)。詳細はお任せしますが、彼らが文書化したこのビジターパターンを使用することは可能だと思います。

于 2008-11-14T10:26:47.157 に答える
0

javap + 正規表現を試してください (例: Perl)

于 2008-11-10T16:01:56.973 に答える
0

注釈をチェックするための簡単なツールは適切です ( http://java.sun.com/j2se/1.5.0/docs/guide/apt/も javax.annotation.processing の Java 6 API の一部です) が、これには型しかありません情報 (つまり、javax.lang.model API を使用して継承階層を取得する簡単な方法を見つけることができませんでしたが、クラスをロードできる場合は、リフレクションを使用してその情報を取得できます)。

于 2008-11-10T15:45:58.767 に答える