2011-10-28 4 views
4

プラグイン可能なアノテーション処理APIをJava6 +とともに使用して、一部のデプロイメントXMLファイルを自動的に作成しています。これらのXMLファイルの一部には、オブジェクトの説明が含まれています。説明は、クラス自体に関連付けられているJavadocと同じ内容です。私はコメントを@Blockアノテーションのフィールドにすることができますが、それは情報を複製します。注釈処理中にクラス/タイプコメントの内容を取得する方法はありますか?プラグイン可能なAnnotation Processor APIはソースコードコメントを取得できますか?

この例では、注釈処理中に「私のブロックの素晴らしい説明」を取得したいと考えています。

/** 
* A nice description of my block 
**/ 
@Block 
public class CustomBlock { 
} 

答えて

0

getDocCommentコメントが返されるはずです。

更新:elements utitlityに移動しました。

+0

Java 6プラッガブルアノテーションAPIには、そのクラスはありません。これは古いものの一部であり、APTスイートを構成するのに苦労します。 – basszero

+0

@basszeroそうです。より新しいAPIのために 'Elements'ユーティリティでまだ利用できるように見えます。 – Kapep

10

私はSOに投稿した直後に答えが見つかるようです。

は、今後の参考のために、ここで

public class CustomAnnotationProcessor extends AbstractAnnotationProcessor 
{ 
    public boolean process(...) 
    { 

     // use the protected member, processingEnv 

     String comment = processingEnv.getElementUtils().getDocComment(anyElement); 


    } 
} 
+0

驚くばかり!私はElementクラスとMirrorクラスを見ていました。私は、これらのクラスにあるコメントを参照することを期待していたからです(これは意味があります)。 –

0

注釈処理APIはjavax.lang.model(.*)パッケージ内のクラスを使用するソリューションです。これらのモデル言語構成およびモデルは、コンパイル中に生成されなければならない。コンパイラはコメントとドキュメントを無視することを意図しているので、それらのパッケージには何もないようであり、コメント/ドキュメントへのアクセス権を与えるものはありません。

javadocの機能がどのように機能するかはわかりませんが、おそらく助けになるかもしれません。

Kapepの回答は面白そうですが、実装固有のcom.sun.*パッケージのものを使用していることに気をつけてください。注釈プロセッサ環境に提供されているリソースがこれらのクラスを使用して実装されていることを確実に確信していない限り、インターフェースからダウンキャストできますが、それを使用しないことをお勧めします。それはせいぜい脆い解決策になるだろう。

EDIT:私はカスタムアノテーション+プロセッサを使用して配線、検証などのためにXML形式のメタデータを生成しています。また、私も説明が必要です。だから私は、プログラミングの目的と、アノテーションに何らかの説明キー(または、クラス名/その他のアノテーション値が指定されていない場合はそれに基づいたデフォルト)を持つ一方で、コード内のクラスを直接使用する人にとって興味深いプログラミングの目的と詳細についてJavaDocを保持しています)を使用して、一部のリソースファイルから説明を取得できます。この説明は「エンドユーザー」を対象としており、コード仕様ではなく上位レベルのものに焦点を当てています。国際化を促進するという利点があります。私はこれがあなたに何の役に立つものであろうとは確信していませんが、私の2つのセントがあります。

関連する問題