問題タブ [annotation-processing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
14980 参照

java - 注釈プロセッサによるコード置換

クラスにメソッドとフィールドを挿入する注釈プロセッサを作成しようとしています...ドキュメントは非常にまばらです。私は遠くに行っていませんし、正しく近づいているかどうかもわかりません。

処理環境は、Filer新しいソース ファイルとクラス ファイルを作成するための便利なメソッドを持つオブジェクトを提供します。それらは正常に機能しますが、既存のソースファイルを読み取る方法を理解しようとしましたが、それが提供するのは「getResource」だけです。したがって、私の Processor 実装では、次のようにしました。

私の最初の困惑は、element.asType().toString().replace(".", "/") + ".java"(修飾された型名を取得し、それをパッケージおよびソース ファイル パスに変換することは) 問題にアプローチする良い方法ではないと感じずにはいられないということです。API の残りの部分は過剰に設計されていますが、元のソース コードを取得するための便利な方法はないようです。

本当の問題は、コンパイラが出力ディレクトリの 2 番目のソース ファイル (「エラー: クラスの重複」) によって自発的に動揺し、スタックしてしまうことです。

この残りの部分 (マクロ lexer とパーサー、および一部のデータを計算し、フィールド値とメソッドを挿入するためのもの) は既に作成しましたが、コンパイラの外部で最初のステップとして動作します。元のファイルに .java 拡張子を付けることができないという事実 (コンパイラがそれらを認識できないようにするため) を除いて、これはうまく機能します。それから、注釈がコード生成を行うことができると聞きました。これはより適切で便利であると思いますが、それに関するガイダンスはあまり見つかりません。

0 投票する
1 に答える
682 参照

java - How to instantiate a class being "annotation processed"?

I am writing an annotation processor and I need to instantiate a class being processed.

I am extracting some documentation based on the class and its annotations, and I'd like to run a method from this class and output the result in the generated documentation.

Unfortunately, when I try to instantiate it I have a ClassNotFoundException which seems logical to me as the processing happens before the compilation round.

I am currently writting an xml file that holds the documentation, maybe there is an annotation post-processor or something similar?

Do you have any idea of workaround?

0 投票する
1 に答える
1038 参照

android - IntelliJ IDEAアノテーションプロセッサ:「プロジェクトクラスパスからプロセッサを取得する」

注釈プロセッサ設定の[プロジェクトクラスパスからプロセッサを取得する]オプションはどういう意味ですか?「プロジェクトのクラスパスからプロセッサを取得する」オプションを正しく理解していれば、クラスパスをスキャンして、すべてのアノテーションプロセッサを自動的に見つける必要があります。

ただし、これはそのようには機能しないようです。プロジェクトのクラスパスにアノテーションプロセッサが追加されたプロジェクトがあります(Androidアノテーション)。「プロジェクトのクラスパスからプロセッサを取得する」を選択した場合、それらは実行されません。それらを機能させるには、「プロセッサパス」で明示的に指定する必要があります。

ビルドインMavenを実行すると、アノテーションプロセッサが実行されます。

これはIntelliJIDEAのバグですか、それとも設定が間違っていることを理解しているだけですか?

0 投票する
1 に答える
426 参照

java - EclipseでNetbeansプラットフォームアノテーションを機能させる

Netbeansプラットフォームは最近、バンドルやlayer.xmlファイルなどのリソースファイルの注釈ベースの生成を導入しました。

Netbeans(これらのアノテーションが機能する場所)にMavenベースのNetbeansプラットフォームプロジェクトがあると、まったく同じプロジェクトをEclipseに簡単にインポートできます。

しかし、何らかの理由で、プロジェクトが正しくインポートされていても(または、少なくとも正しくインポートされているように見えます<-必要なライブラリがダウンロードされているなど)、上記のアノテーションはEclipseによって実行されません。

症状には、これらのアノテーションを使用するクラスにインポートされた生成されたクラスがありません。

例:

上記の例に見られるように、アノテーションは拡張的に使用されますが、Eclipseによって処理されないため、バンドル(自動的に生成される必要があります)が既知のクラスとして認識されないため、次の行はコンパイルできません。

さらに詳しい情報:

使用されるEclipseはJunoであり、プロジェクトのプロパティでは注釈処理が有効になっています。

Eclipseでこれを機能させる方法について誰かが何か考えを持っていますか?

0 投票する
7 に答える
62453 参照

java - Maven 3 - 注釈プロセッサの依存関係を追加するには?

プロジェクトのソースで注釈プロセッサを実行する必要があります。アノテーション プロセッサはプロジェクトの推移的な依存関係になるべきではありません。これは、アノテーション処理にのみ必要であり、他には何も必要ないためです。

これは、私がこれに使用する完全な (動作していない) テスト pom です。

テスト用のプラグイン構成で注釈プロセッサとして明示的に定義org.hibernate.jpamodelgen.JPAMetaModelEntityProcessorしましたが、それが必要ないことはわかっています。

私が遭遇している問題は、hibernate-jpamodelgen依存関係がコンパイラのクラスパスに追加されていないため、注釈プロセッサが見つからず、ビルドが失敗することです。

この答えに従って、依存関係をビルド拡張機能として追加しようとしました(それらが何をすべきかを理解していません!)次のように:

hibernate-jpamodelgenこれは、コンパイラのクラスパスにも追加されません。

<dependencies>これまでのところ機能することがわかった唯一のことは、セクションのプロジェクトに依存関係を追加することです。これには、後で推移的な依存関係として追加するという不幸な副作用があり、これはhibernate-jpamodelgen避けたいと思います。

私の以前の作業セットアップでは、maven-processor-pluginプラグインを使用して目的を達成しました。ただし、このプラグインは eclipse m2e ではサポートされておらず、最新バージョンの の最新バージョンではmaven-compiler-plugin複数のコンパイラ引数が適切に処理されるため、後者を使用することをお勧めします。

0 投票する
3 に答える
970 参照

java - コンパイル時に VM 引数にアクセスする

プログラムで VM 引数にアクセスする際に問題があります。いくつかの VM 引数にアクセスしたい注釈プロセッサを作成しています。NETBeans IDE を使用しています。注釈プロセッサの jar ファイルを作成し、それを注釈付きの Java ファイルを持つ別のプロジェクトで使用します。

私の注釈プロセッサプロジェクトでは、IDEでVM引数を次のように設定しました

そして、アクセスしようとすると、注釈プロセッサの process() 関数で

null を出力します。注釈プロセッサと注釈付きクラスの両方が同じ VM で実行されるため、コンパイル時にこれらの VM 引数にアクセスできますか? ありがとう

0 投票する
1 に答える
4192 参照

java - 最新の Java アノテーション処理

注釈処理はまだJava 6+のアクティブな部分ですか、それとも非推奨/非推奨/廃止されたものですか. 廃止された場合、その理由は何ですか? そして、それがまだ非常に有用で「アクティブ」である場合 (Java 6+ JDK に対して開発されている新しい Java プロジェクトは引き続きそれから恩恵を受けるでしょう)、注釈プロセッサがどのように使用されるかについての私の理解を確認/修正してください:

  1. たとえば、独自の注釈クラスを作成します。@MyAnnotation
  2. 特定のクラス、メソッド、フィールドなどを@MyAnnotation
  3. ビルド プロセス中に、カスタムを呼び出しますMyAnnotationProcessor(どのように? )
  4. プロセッサは、クラスパスをスキャンして次のインスタンスを探します。@MyAnnotation
  5. 通常、アノテーション プロセッサは動的なバイトコード インジェクションを実行し、コンパイルされたクラスをオンザフライで変更/強化します。
0 投票する
0 に答える
780 参照

java - 注釈プロセッサでのStandardLocationクラスの使用

注釈プロセッサの開発にNETBeansIDEを使用しています。アノテーションプロセッサを作成し、それをJARに変換してから、このJARを参照ライブラリとしてアノテーションを使用している別のJavaアプリケーションに追加しました。

ソースファイル(注釈が付けられているファイル)にアクセスしたい場合、私の質問は注釈プロセッサ内にあります。次に、以下のコードを使用してFileObjectを取得しようとします。

しかし、nullを返します。ここでのデモは、注釈付きクラスMainCopy.javaを持つパッケージです。StandardLocationクラスのドキュメントを読むと、それが機能するためにはサポートされている必要があると書かれています。誰かがこれを解決するのを手伝ってくれるか、FileObjectを取得する方法を教えてくれませんか。

ありがとう

0 投票する
2 に答える
1476 参照

java - junitテストでjavax.lang.model.element.Elementとしてクラスを取得します

ユーティリティクラスElementUtilsをテストしたいのですが、クラスをElementとして取得する方法がわかりません。AnnotationProcessorsでは、次のコードを使用して要素を取得します

ただし、RoundEnvironmentはテストで使用できないため、これはオプションではありません。

クラスをjavax.lang.model.element.Elementとして取得する方法はありますか?

0 投票する
3 に答える
4096 参照

java - インポートステートメントにアクセスするJavaアノテーション処理API

私はJavaコードを生成することになっているAnnotationProcessorを書いています。特定の既存のインターフェイスから派生インターフェイスを生成する必要があります。

この目的のために、元の入力コードのインポートステートメントを見つけて、生成されたJavaファイルに出力できるようにする必要があります。

これはどのように行うことができますか?