0

プラグイン(自動終了分析ツール)を、ユーザーがEclipse内で選択したコードで実行したいと思います。当然、ユーザーはソースコード(.javaファイル、アウトライン内のメソッドなど)を選択します。ただし、私のプログラムでは、コンパイルされた.classファイルを入力として必要とします。

.class選択したソースアイテムのファイルを取得するにはどうすればよいですか?これに関連して、選択したソースメソッドへのバイトコード記述子を取得するにはどうすればよいですか?ジェネリックスとvarargsの場合、(Eclipse)ソース記述子を対応するバイトコード記述子に変換することは私には簡単ではないようです。

自分で実行javacしたくないし、ファイルの名前を推測したくない.class(これは内部クラスにとって厄介です)そしてディスク上でそれを見つけようとします(存在する場合は?Eclipseにコンパイルを強制することができます) ?)。

4

1 に答える 1

0

バイトコードアウトラインプラグインは、次のソリューションを使用します(を参照JdtUtils.getByteCodePath)。

  1. ソース要素に基づいて、出力場所を見つけます。例/home/user/workspace/project/build/:)
  2. パッケージ情報を使用して、内部の適切なディレクトリを見つけますbuild//home/user/workspace/project/build/some/package/
  3. 「最も外側の」クラス定義(内部クラスにとって重要)を見つけ、この名前をファイルのファイル名として使用し.classます。例:/home/user/workspace/project/build/some/package/Foo.class
  4. 内部クラスの場合は、奇妙な魔法(JdtUtils.getClassName)を実行し、それに応じて結果のクラスファイルの名前を変更します(おそらく結果としてFoo$1.class

したがって、この質問の問題は解決され、内部クラスの対応するファイル名への変換が改善される可能性があります。しかし、作者によると、現在のアプローチ(「魔法」を使用)は「ケースの95%」で機能し、過去数年間に関連するバグについては知りません。

于 2012-12-07T10:15:37.613 に答える