4

メソッドでの変数の使用を検出するスニペットを分析する Java コードを作成しています。(具体的には、グローバル クラス変数がメソッドで読み書きされる回数)。JavaParser を使用してこれを実行できますか? 誰か他の推奨事項はありますか?クラス指標の計算方法を知っている人はいますか? 彼らはおそらく同様のものを扱っています。

4

3 に答える 3

2

読み取られた変数が「グローバル」かどうかについて質問するには、コードを解析し、シンボル テーブルと関連する型情報を構築する、完全な Java コンパイラ フロント エンドに相当するものが必要です。

コンパイラが実際にこの情報をクラス ファイルに記録している限り、「リフレクション」操作を実行してそれを取得できる場合があります。そのような情報が .class ファイルに存在する限り、カイゴロドフの回答で言及されているようなクラスファイル バイトコード プロセッサを使用してアクセスできます。

ANTLR には Java 用の文法がありますが、シンボル テーブルの構築がサポートされているとは思えません。これを自分で偽造することはできません。Java のルールは複雑すぎます。これを行うためにANTLRパーサーを拡張できるかもしれませんが、それは多くの作業になります。「Javaのルールは複雑すぎる」.

Java コンパイラが、その内部構造へのある種の名前/型の正確なアクセスを提供していることを理解しています。あなたはそれを使うことができるかもしれません。

当社の DMS Software Reengineering Toolkit には、名前と型の解決を備えた完全な Java パーサーがあり、この目的に使用できます。

于 2012-11-26T05:52:25.700 に答える
2

変数の使用箇所を見つけるタスクを実行するには、ANTLR を使用するパーサー ビルドも AST を生成する必要があります。準備ができている AST ビルダーを見つけることができるとほぼ確信していますが、どこにあるのかわかりません。

もう 1 つの方法は、ASMBCEL、またはその他のクラス ファイル アナライザーを使用してクラス ファイルを分析することです。その方が簡単で、作業が速くなると思います。また、他の jvm 言語 (Scala など) でも機能します。

于 2012-11-26T05:12:14.987 に答える