2009-07-25 24 views
1

Javaソース・ファイルの結束メトリックを測定するツールを作成しましたが、これらのメトリックはメソッドによってアクセスされる属性のリストを判別できます。メソッドコードを抽出するが、いくつかの問題があるので、Javaファイルを解析してメソッドコードをテキストとして抽出するツールがあれば尋ねる。Javaメソッド・テキストの抽出

おかげで、

+0

あなたは自分が持っているものと何をしたいのかを正確に示すコードサンプルを提供できますか? –

+0

アトリビュートがアクセスされていることを正確にはどういう意味ですか?あなたはフィールドを意味しますか? –

答えて

0

は、java-クラスをコンパイルするにはかなり古いツールがjadです。それはjdk 1.5までうまく動作します。

+0

お返事ありがとうございます。答えは ですが、デコンパイラは必要ありません。クラス内の各Methodオブジェクトを、メソッドテキストを含む文字列に関連付けることができます。例えば、このクラスを持っているとします。 ClassA { void m1 {int x;}} 次に、メソッドコードを表すtext = {int x;}}を含むようにリフレクションで生成されたメソッドm1のラッパーのようなものを作成できるJavaライブラリが必要です。 com.sun.org.apache.bcelを使用しようとしましたが、com.sun.org.apache.bcel.internal.classfileクラスのメソッドでメソッドコードを抽出できませんでした。 ありがとう –

+0

つまり、ClassAのラッパーはClassAの各メソッドのソースコードを知ることができますか? – Burkhard

+0

はい、正確です。通常のリフレクションフレームワークでは、Methodクラスにはメソッドのシグネチャを知る属性とメソッドがありますが、メソッドコードを取得するメソッドはありません。したがって、各Methodオブジェクトに割り当てるリフレクションフレームへのラッパーである手動コードを作成しました。メソッドコードを使用していましたが、コード内にいくつかの問題があり、このために既存のテスト済みツールを探していました。 –

0

実際にはクラスファイルで作業するほうが簡単かもしれませんが(それ以上のツール)、Javaソースパーサーもいくつかあるようです。 "javaparser"は素敵に見える:http://code.google.com/p/javaparser/

+0

返事ありがとうございました 私の主な問題は、メソッドmがある場合、このメソッドでアクセスする属性のリストとメソッドmが呼び出す他のメソッドのリストを取得したいのですコードファイルを解析するのは良い方法ですが、もっと簡単な方法を知っていれば、それについて教えてもらえます。また、これは通常のリフレクションフレームワークやcom.sun.org.apache.bcelフレームワークでも可能です? ありがとう、 –

+0

私はまだこのようなことはしていませんが、リフレクションはアプローチではないことに注意してください。問題のクラスを最初にロードする必要があり、メソッド自体の内部をイントロスペクションすることができないためです。また答えたマーティン・ヴォー・レヴィスもBCELの経験があるようです。 –

1

私はあなたが欲しいものが欲しいと懐疑的だ。おそらくあなたはソースコードを持っていましたが、どのようにアクセスされる属性のリストを決定するのでしょうか?

代わりに、実際にバイトコードを移動し、getfieldとsetfieldオペコードを探す必要があります。 BCELはそのための適切なアプローチです。

0

使用ASM。あなたが問題を解決するために、私はそれを正しく理解していれば、基本的に訪問者を書いて、その方法の中のフィールドを見守ってください。

0

メソッド本体の詳細を取得するには、Javaパーサが必要です。 Javaコードの各シンボルが何を表しているかを知るには、各メソッド/クラス/パッケージのシンボルテーブルに相当するものを作成する必要があります。

Java Front Endは、Javaソースファイルのセット(使用できないソース用のクラスファイルを使用)のシンボルテーブルを構築するフル機能のJavaパーサーです。 JavaフロントエンドはASTを構築し、ASTをメソッドのサブツリーに分割するために使用することができ、プリテプリターは各メソッド(コメントを含む)のテキストを再生成することができます。これはすべてプログラム変換システムDMSの上に構築されています。