2017-02-02 17 views
0

短くて甘い:Javadoc APIに注釈の完全修飾名を付けるよう依頼しているにもかかわらず、単純な型名を返すだけです。Javadoc要素から完全修飾型の名前を取得できない

私はアノテーションの検査に大きく依存するJavadocドックレットを作成しています。このように、AnnotationDescオブジェクトの配列をとり、それを記述するAnnotationDescオブジェクトに注釈の完全修飾名を関連付けるMapを返すユーティリティ関数を作成しました。ここでは、関連する機能があります:それは価値がある何のため

public static final Map<String, AnnotationDesc> getAnnotationMap(AnnotationDesc[] notes) 
{ 
    if (notes == null) 
    { 
     return Collections.emptyMap(); 
    } 

    return Collections.unmodifiableMap(Arrays.stream(notes).collect(Collectors.toMap(AnnotationUtils::getNoteName, note -> note))); 
} 

private static String getNoteName(AnnotationDesc note) { return note.annotationType().qualifiedTypeName(); } 

は、私はまた、AnnotationDesc.annotationTypeメソッドの戻り値によって公開された別の方法であるqualifiedNameを、使用して試してみました。

私の統合テストでは、これはすごく効果的です。しかし、私のドックレットをArtifactoryにプッシュし、別のプロジェクトにプルダウンし、Gradleタスクを使ってドックレットを呼び出そうとすると、マップのキーはアノテーションの単純な型名になります。ここで

は私のGradleタスクの定義です:私はプログラム要素が完全修飾アノテーションで注釈されている場合は、完全修飾名は、実際のJavadocによってピックアップされていることに気づいた

task myDocletTask(type: Javadoc) { 
    source = sourceSets.main.allJava 
    destinationDir = reporting.file("my-doclet-dir") 
    options.docletpath = configurations.jaxDoclet.files.asType(List) 
    options.doclet = <redacted - fully qualified type name of custom doclet> 
} 

API。たとえば、@com.package.Annotationは予想される動作になりますが、@Annotationでは発生しません。

なぜ、これが起こっているのか、さらに重要なのは、どのように私が期待された/望ましい行動を達成できるのか理解してもらえますか?

+1

- AnnotationUtilsクラスはどこから来たのですか? - ああ、私はそれが含まれているクラスで、getNoteNameメソッドは以下の通りです。 – allenru

答えて

0

問題は、ドキュメンテーション時に注釈がドックレットのクラスパスになかったことです。この問題を解決するために、私はGradle Javadocタスクを次の行で増やしました:options.classpath = sourceSets.main.runtimeClasspath.asType(List)

関連する問題