1

次の問題を簡単に/より少ない労力で解決できるツール/アプローチを知りたいですか? 必要なのは、ANT スクリプトを介して呼び出すことです。

Eclipse ワークスペースには、projectA と projectO (15 の数) など、いくつかのプロジェクトがあります。それらのほとんどは Java プロジェクトです。ここでのポイントは、Eclipse IDE を使用せずに、プログラムでデータを収集する必要があることです。

Java プロジェクトである projectA には、InterFaceA などのインターフェイスがあり、他のさまざまなプロジェクトで実装されています。

ポイントは、InterfaceA を実装した 15 のプロジェクトすべてからすべてのクラスをリストする必要があるということです。

Javadoc の拡張、Eclipse AST、javaCC、ANTLR など、いくつかのツールに出くわしましたが、既製のソリューションは見つかりませんでした。

以下のアプローチについて考えましたが、実装が難しいことがわかりました。

  • 宣言されたすべての変数、フィールド、メソッド レベル、つまり Java ファイル / クラス全体を調べて、それらの型を調べ、その中から InterfaceA を実装するクラスを見つけます。
  • インターフェイスAのワークスペース全体でEclipseのような参照を見つけますが、コードを使用しますか? ソースを取得していただければ幸いです。

直接的な解決策をリクエストできますか? Eclipse AST を使用して、これを直感的な方法で行うことはできますか?

PS: 既存のコードはきちんと維持されていません。したがって、interfaceA がインスタンス変数で宣言されていない可能性がありますが、使用される直前にローカル変数として使用されている可能性があります。さらに、多くの内部クラスなどがあります。

前もって感謝します。

4

2 に答える 2

1

一般的に言えば、依存関係の分析/管理の問題です。

いくつかのツール/トピックが既に存在します:

于 2012-10-13T08:34:14.580 に答える
-1

私にとって最も簡単な方法は、Linux シェルでgrepwcなどのツールを使用して行うことです。GREP を使用すると、好きな種類のパターンを見つけることができます (ソース コードがあるので、それを掘り下げることは問題になりません)。つまり、「InterFaceA を実装する」または「SomeClassB を拡張する」などです。WC のおかげで、パターンの出現を数えることができます。2つを組み合わせると、無限の可能性が広がります。

例えば:

  1. Serializable インターフェイスを実装するすべてのクラスを検索しています。grep -iR 'implements Serializable' *
  2. Serializable インターフェイスを実装するすべてのクラスを数えます。grep -iR 'implements Serializable' * | wc -l
  3. #2 と同じことを行いますが、.svn サブディレクトリ内のすべてのファイルをスキップします。grep -iR 'implements Serializable' * | grep -v .svn | wc -l

これを ANT に接続するには、bash コマンドを実行する ANT タスクを作成するだけです。それを行う方法の多くの例を見つけるのは難しいことではありません。

Linux を使用しない場合は、Windows で使用できる同等のツールがあります。Web を検索すると、これに似たものが見つかります。

それが役立つことを願っています。

于 2011-11-27T20:16:55.587 に答える