5

JDK 1.7 を使用して新しいカスタム ドックレットを作成しています。これまでに発見した問題は次のとおりです。

Doc メソッドisAnnotationType()isAnnotationTypeElement()isEnum()およびisEnumConstant()は機能しません。それらは常に false を返します

PackageDocメソッドenums()は機能しません。常に空の配列を返しますEnumsメソッドallClasses()およびの結果に含まれordinaryClasses()ます。

ClassDocメソッドenumConstants()は機能しません。常に空の配列を返しますEnum定数は method の結果に含まれfields()ます。

PackageDocメソッドannotationTypes()は機能しません。常に空の配列を返します。Annotationsmethod の結果に含まれているためinterfaces()、次の回避策を実装できます。

AnnotationTypeDoc annotationDoc;
ClassDoc[] interfaces = packageDoc.interfaces();
for (ClassDoc classDoc : interfaces) {
if (classDoc instanceof AnnotationTypeDoc) {
    annotationDoc = (AnnotationTypeDoc) classDoc;
} else {
    continue;
}
process(annotationDoc);
}

「Javadoc 5.0 の新機能」ページ ( http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.5.0.html )で見つけたものに基づいて、私は推測していますJDK 1.7 で書いているにもかかわらず、私のドックレットはある種の 5.0 より前の互換モードで動作しています。これは、「Javadoc 5.0 の新機能」ページで見つけたものです。

カスタムドックレットとの非互換性

5.0 より前に作成されたカスタム ドックレットは、5.0 の新しい言語機能を使用するソース ファイルで実行すると、互換性の問題が発生します。新しい言語機能: ドックレット API と標準ドックレットが改訂され、新しい 5.0 言語機能 (ジェネリック、列挙型、変数引数、および注釈) を処理できるようになりました。これらの機能を処理するには、カスタム ドックレットも修正する必要があります。Javadoc ツールは、可能な範囲で、1) 5.0 より前のソース コードで引き続き動作し、2) 5.0 ソース コードに対する期待に一致するプログラムのビューで、いわゆる「レガシー」ドックレットを提示しようとします。 . したがって、たとえば、型パラメーターと型引数はジェネリック コンストラクトから取り除かれ、型変数とワイルドカード型は消去によって置き換えられ、ClassDoc.fields() は列挙定数を返します。

4

1 に答える 1

5

解決しました!実際には、5.0 より前の互換モードで動作していました。私がしなければならなかったのは、次のメソッドをカスタム ドックレットに追加することだけでした。

public static LanguageVersion languageVersion() {
    return LanguageVersion.JAVA_1_5;
}
于 2014-01-20T17:43:38.403 に答える