1

さて、まず第一に、これは潜在的に愚かで狂っている可能性があります。

私はフレームワークを構築しようとしています(または、すでに存在する場合はそれを使用します)。このフレームワークは、多数のJavaソースファイルを取り込み、これらのファイルが相互作用する方法を出力します。たとえば、file1.javaはfile2.javaをインポートできます。file2.javaは、 file3.javaから静的メソッドを呼び出すことができます。ファイルのセットをコンパイルまたは実行せずにこれを実行できれば、理想的には素晴らしいでしょう。クラスの一部を探索できるReflectionAPIを知っていますが、それが私が探しているものですか?

また、これを他の言語、たとえばPythonやLisp(ここに他の言語を追加)に拡張するのはどれほど難しいですか?

質問のタイトルの作り方がよくわからなかったので、以前にこのような質問があったら、その質問にリンクしていただければ幸いです。

4

3 に答える 3

2

私は現在プロジェクトに取り組んでおり、主な機能はあなたが言及したものと非常に似ており、javaparser を使用しています: http://code.google.com/p/javaparser/

javaparser は非常に強力で、ソース コードの分析に大いに役立ちますが、javaparser を使用しても完全な依存関係とクラスの相互作用を取得するのは非常に困難です。

例: クラスのすべての依存関係を取得したい場合、最も直接的な方法は、ソース コードの「インポート」領域を取得することです。これは、javaparser を使用すると非常に簡単です。

しかし、「インポート」だけでは不十分です。現在分析しているクラス ClassA が、ClassA と同じパッケージにあるクラス ClassB と呼ばれる場合、ClassB はインポート領域に表示されません。

したがって、この状況では、ClassB の依存関係を取得できません。

また、クラスのインタラクティブについては、クラスの適切な依存関係を 100% 取得できない場合、クラス間の適切なインタラクティブを 100% 知ることはできません。

とにかく、今のところ、javaparser は私が見つけた中で最も強力で便利な Java ソース コード分析ツールです。

于 2012-09-20T14:35:19.117 に答える
1

あなたは 2 つの質問をしましたが、最初の質問に答えようと思います。Java ファイルの何らかのソース分析を行って、それらが相互にどのように相互作用するかを確認していると思います (少なくともそれは私が理解したことです) したがって、基本的にこれを行うには、Eclipse IDE のように振る舞う必要があります。各 .java ファイルのソース コードをスキャンし、Java の予約語と構文のデータ構造を構築します。各 .java ファイルを分析したら、それらの間のリンクを発見することができます。

元。

  1. クラスのパッケージ名とその名前とスコープを保存する
  2. 宣言されたすべての変数、その値、およびスコープの HashMap を格納します
  3. ソース ファイル内のメソッドを検出し、それらの名前、in + out パラメーター、およびスコープを保存します

さらに多くのことを行うことができ、これらの構造を検出するには、独自の (またはネットで何かを見つける) パーサーを作成し、正規表現を使用してこれらを検出する必要があります。それらをプログラムに保存し、すべてのソース ファイルが分析されると、相互作用を確認できるようになります。

元。

ソース ファイル 1 はパッケージ xy にあり、3 つのパブリック メソッドと 2 つのパッケージ スコープ メソッドがあります。ソース ファイル 2 はパッケージ z にあり、1 つのパブリック メソッドと 3 つのプライベート メソッドがあります。

したがって、ファイル 1 は、その 1 つのパブリック メソッドを呼び出すことによってファイル 2 と対話できると結論付けることができます。そして、すべてのファイルに対して同じ分析を行うことができます。

于 2012-07-04T04:45:07.943 に答える