メソッドでの変数の使用を検出するスニペットを分析する Java コードを作成しています。(具体的には、グローバル クラス変数がメソッドで読み書きされる回数)。JavaParser を使用してこれを実行できますか? 誰か他の推奨事項はありますか?クラス指標の計算方法を知っている人はいますか? 彼らはおそらく同様のものを扱っています。
3 に答える
読み取られた変数が「グローバル」かどうかについて質問するには、コードを解析し、シンボル テーブルと関連する型情報を構築する、完全な Java コンパイラ フロント エンドに相当するものが必要です。
コンパイラが実際にこの情報をクラス ファイルに記録している限り、「リフレクション」操作を実行してそれを取得できる場合があります。そのような情報が .class ファイルに存在する限り、カイゴロドフの回答で言及されているようなクラスファイル バイトコード プロセッサを使用してアクセスできます。
ANTLR には Java 用の文法がありますが、シンボル テーブルの構築がサポートされているとは思えません。これを自分で偽造することはできません。Java のルールは複雑すぎます。これを行うためにANTLRパーサーを拡張できるかもしれませんが、それは多くの作業になります。「Javaのルールは複雑すぎる」.
Java コンパイラが、その内部構造へのある種の名前/型の正確なアクセスを提供していることを理解しています。あなたはそれを使うことができるかもしれません。
当社の DMS Software Reengineering Toolkit には、名前と型の解決を備えた完全な Java パーサーがあり、この目的に使用できます。