15

以下の要件の解決策を探していました-

  • ソース ファイルは、メソッドにカスタム アノテーションを使用して書き込まれます。
  • メソッド本体は、アノテーションに基づいて少し変更する必要があります。
  • ソース ファイルは変更しないでください。ただし、コンパイラへの入力はソース ファイルを変更する必要があります。

以下のAPIを見てきました-

  • javax.annotation.processing - 注釈処理。
  • javax.lang.model.* - アノテーション処理とコンパイラ ツリー API で使用される言語モデル
  • com.sun.source.* - コンパイラ ツリー API。

私は次のようにこれを設計することを考えました:

  1. 注釈プロセッサを作成する
  2. コンパイラ ツリーを生成する
  3. 元のソース ファイルに影響を与えることなく、実行時にコンパイラ ツリーを編集します。
  4. ツリーをコンパイラに提供する

コンパイラ ツリー API は、com.sun.source.tree.MethodTree へのアクセスを提供する場所で有望なようです。

ただし、コンパイラ ツリー API は読み取り専用のようです。手順 3 と 4 を達成する方法がわかりません

タスクを完了するために採用できるAPIはありますか

注: ソース コードの操作方法のみを探しています。実行時のバイトコード操作なし / AOP

環境: Java 6

4

3 に答える 3

3

標準の注釈処理 API は、ソース コードの直接の変更をサポートしていません。ただし、注釈付きの型のスーパークラスまたはサブクラスのいずれかを生成することによって、ソース コードを変更する効果の一部を得ることができます。以下のブログ エントリは、この手法の例を示しています。

「アノテーション処理によるプロパティ」

于 2013-02-18T19:13:41.630 に答える
0

すべてのソースコードを別のディレクトリにコピーし、そこでコードを変更して、一時パスからビルドすることをお勧めします。

于 2013-02-18T19:23:11.523 に答える