問題タブ [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 投票する
1 に答える
2039 参照

java - TypeVariable または VariableElement から、コンパイル時に注釈プロセッサ内の基になるクラスのメソッドのリストを取得できますか

私は注釈付きのクラスを持っています:

アノテーション プロセッサで、setMessage メソッドに渡されたオブジェクトの getter メソッドのリストを取得したいと考えています。この情報はコード生成に使用されます。

私は ElementScanner6 を拡張し、パラメーターを保持しているように見える VariableElement を取得することができましたが、ここからどこへ行くべきかわかりません。

したがって、この例では、コンパイル時に TestMessage クラスのすべてのメソッドを取得したいと考えています。

何か案は

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

java - コード生成の注釈処理中に注釈付きのクラス型を取得する方法は?

注釈プロセッサは、注釈付きオブジェクト用と注釈自体用の2 つのTypeElementを提供します。

Classコードを生成するために、注釈処理中に注釈付きオブジェクトの型を知る必要があると仮定しましょう。TypeElement.getQualifiedName()で修飾名を抽出できます。ただし、使用しようとするとClass.forName(fullyQualifiedName)ClassNotFoundException.

クラスがアノテーション処理コードのパス上にないことを意味している可能性があります。処理ライブラリのクラスパスにすべての注釈付きコードを配置することなく、注釈処理中にそのようなクラスを取得することは可能ですか?

回避策は、次のようなものを生成することです。

代わりに生成されたコードで c を使用しますが、クリーンではありません。

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

eclipse - Eclipse Indigo での静的メタモデル クラスのサブパッケージ化

私は現在 Eclipse Indigo を使用しています。エンティティの同じパッケージにメタモデル クラスを含めるのではなく、サブパッケージにメタモデル クラスを自動的に生成したいと考えています。

JPA User Guide for Canonical Model Generator on Eclipse Galileoの指示に従いましたが、Indigo ではまったく機能しません。:(

サブパッケージで静的メタモデル クラスを使用している人はいますか? Eclipse Indigo で設定する方法はありますか?

0 投票する
4 に答える
17600 参照

java - Java 6 アノテーション処理 -- アノテーションからクラスを取得する

wiki ドキュメントの自動生成に使用する @Pojo というカスタム アノテーションがあります。

私はこのように使用します:

リソースメソッドにアノテーションを付けて、アノテーションプロセッサが期待するリソースとタイプを説明するwikiページを自動的に生成できるようにします。

value注釈プロセッサでフィールドの値を読み取る必要がありますが、実行時エラーが発生します。

私のプロセッサのソースコードには、次の行があります。

しかし、プロセッサは実際のクラスを利用できません。javax.lang.model.type.TypeMirror代わりに、実際のクラスの代理として aが必要だと思います。入手方法がわかりません。

私が得ているエラーは次のとおりです。

これは、私の注釈Appointmentの 1 つで言及されているクラスです。@Pojo

残念ながら、Java アノテーション処理に関するドキュメントやチュートリアルはほとんどないようです。ググってみた。

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

gwt - マルチプロジェクト設定での Requestfactory 検証

gwt2.4 のリリース版に変更しようとしたところ、問題が発生しました。セットアップで複数のプロジェクトを使用しています。サーバーサイド コードを含むプロジェクト、共有コードを含む 1 つのプロジェクトがあり、さまざまな gwt プロジェクトで使用でき、gwt プロジェクトはすべてを結合します。私はmavenですべてを構築します。ここにある注釈処理の指示に従いました: http://code.google.com/p/google-web-toolkit/wiki/RequestFactoryInterfaceValidation

プロキシとサービスがある共有プロジェクトをコンパイルすると、DeobfuscatorBuilder.java を含む「 generated-sources\apt\」フォルダーが作成されます。このプロジェクトのソースをメインプロジェクトの依存関係として持っており、バリデータも実行しようとしていますが、DeobfuscatorBuilder.java はここでは作成されません。すべてがコンパイルされますが、requestfactory への呼び出しを呼び出すと、エラーが発生します。

セットアップに間違いがあると思いますが、どこを見つけることができませんでした..この問題を解決する方法を知っている人はいますか?

よろしくアルネ

アップデート:

これをpomに追加しました:

これにより、依存関係のソースが解凍され、ターゲット フォルダーに配置されます。それから私は追加しました:

私のプロセッサプラグインに。

この方法では、ワークスペースにすべてのプロジェクトを配置する必要はなく、継続的な統合システムで動作するはずです。アンディの返事がなければ、それを理解することはできなかっただろう :)

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

java - アノテーション プロセッサにスーパー クラスが存在しないことを確認しています

アノテーション プロセッサでを取得する場合、メソッド を使用しTypeElementてそのスーパー クラス (より具体的にはその の ) を要求できます。JavaDoc によると、明示的に何も拡張しない (つまり、スーパー クラスである) 型、またはインターフェイスである型は、with asを返します。TypeMirrorgetSuperClass()ObjectNoTypeNONETypeKind

モデル/ミラー API の全体があらゆる機会に一瞬混乱するように見えるという事実を無視して、どうすればこれを確実に確認できますか? コードの抜粋を次に示します。

これは適切な方法ですか?かなりぎこちないようです。equalsTypeMirrorのメソッドはセマンティックの等価性チェックに使用すべきではないため、 に使用しても安全かどうか疑問に思っていTypeKindます。列挙型なので私の直感ではイエスと言っていますが、それについては疑問がありinstanceofます。

これを行うより良い方法はありますか?javax.lang.model パッケージ全体とその子パッケージには相互参照があり、何かに最適な方法が何であるかがはっきりしません。いくつかのものには便利なユーティリティメソッドがあり、上記のような疑わしいアクロバットを必要とする一見単純なタスクがあります。

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

java - TypeMirror の isSubtype と isAssignable の違い

コンパイラーによって Java SE 6 または 7 のアノテーション・プロセッサーでインスタンスを使用できるようにする必要があるユーティリティー・インターフェースTypesのドキュメントには、私が取り組んでいるコード・スニペットで興味深い 2 つのメソッドがあります。フィールドの型が特定の抽象クラスから継承された型であるかどうかを確認する必要があります。適用できると思われる 2 つの方法はisAssignable、 とisSubtypeです。しかし、これらのどれを使用するかはわかりません。

上記のドキュメントで参照されている Java 言語仕様の部分を確認しました。サブタイプと割り当て変換の概念の違いを理解しています (少なくとも私は理解していると思います)。私が間違っていない限りjava.lang.Short、プリミティブのサブタイプにはなりません (サブタイプはプリミティブlong間で定義されますが、クラスやプリミティブ間では定義されません)。

ただし、私の場合、どの方法を使用するのが最適かはまだわかりません。サブタイプのチェックは、割り当て可能性よりも厳密で好ましいように見えますが、クラスに関しては、一方が他方を自動的に暗示しているように感じます。

長いバージョンの短い:比較された TypeMirrors が両方ともクラス (インターフェイスまたは列挙型ではない) の場合、同等ですかisAssignable?isSubtype

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

java - メソッド本体内のアノテーションの処理

Pluggable AnnotationProcessingAPIを使用してJavaアノテーションを処理しています。メソッド本体で使用されるアノテーションも処理することはどういうわけか可能ですか?

手伝ってくれてありがとう。ピーター

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

java - コンパイル ラウンド全体での処理環境メンバーの一貫性

JDK 6 および 7 の Java Annotation Processing API (5 の apt ツール API ではない) は、アノテーション プロセッサのライフサイクルを定義します。1 つは引数のないコンストラクターを介してインスタンス化され、initメソッドはインスタンスで呼び出され、ProcessingEnvironmentそのプロセッサがメソッドを介して使用されprocessます。プロセッサの 1 つのインスタンスのみが作成され、該当する場合、後続のすべての処理ラウンドで使用されます。

私のプロセッサー・クラスは少し肥大化していたので、処理するはずの別個のアノテーション用のハンドラー・クラスを作成しました。これらのクラスのメソッドでは、ユーティリティ メソッド用にから取得したインスタンスを常に渡してElementsいます。これにより、メソッドのシグネチャがかなり長くなります。TypesProcessingEnvironment

プロセッサ インスタンスだけでなく、ハンドラでもインスタンスElementsへの参照を維持したいだけです。渡されたTypesものからメソッドに取得することでこれを行いました。さて、これは安全かどうか疑問に思っています。JavaDoc forは、一部のメソッドがプロセッサに対して 1 回だけ呼び出されることを明確にしていますが、ここでは言及されていません。これは暗黙のうちに理解されていると思い込んでいましたが、100%確実ではありません。ProcessingEnvironmentinitProcessorinit

Messager同様に取得できるインスタンスが、ProcessingEnvironmentすべての処理ラウンドで同じままであるかどうかも知りたいです。あるラウンドからの警告/エラーが表示されるのではなく、他のラウンドが取り残されることは望ましくありません。ラウンド全体で同じインスタンスを使用しても安全であると合理的に確信していますが、ある程度の確実性が必要です。

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

java - 前方互換性のある Java 6 アノテーション プロセッサと SupportedSourceVersion

私は 1 つのプロジェクトで Java 7 を試しており、この種の注釈プロセッサ (Bindgen および Hibernate JPA modelgen) から警告を受けています。

@SupportedSourceVersion(SourceVersion.RELEASE_6)これは、アノテーション プロセッサ クラスのアノテーションが原因です。これらは Java 6 でコンパイルされているため、SourceVersion利用可能なの最大値は ですRELEASE_6。の Java 7 バージョンでは、 がSourceVersion導入されてRELEASE_7います。

私の質問: 注釈プロセッサはどのように前方互換性を処理することになっていますか? それらの個別の jdk6 および jdk7 バイナリ バージョンが必要ですか? ここで何か他のことを理解していませんか?

この懸念に関して、次の情報しか見つかりませんでした。

使用したQuerdydslバグレポート

コメンターが最新のソース バージョンのサポートを推奨しているOracle ブログ