在自定义Doclet中处理一些5.0语言功能的问题 - 枚举和注释



我正在使用JDK 1.7编写全新的自定义Doclet。这些是我到目前为止发现的问题:

DOC方法isAnnotationType()isAnnotationTypeElement()isEnum()isEnumConstant()不起作用。他们总是返回false

PackageDoc方法enums()不起作用。它总是返回一个空数组Enums包括allClasses()ordinaryClasses()的结果。

ClassDoc方法enumConstants()不起作用。它总是返回一个空数组Enum常数包含在方法fields()的结果中。

PackageDoc方法annotationTypes()不起作用。总是返回一个空数组Annotations包括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/guides/javadoc/javadoc/whatsnew-1.5.0.5.0.html)我猜想,即使我使用JDK 1.7编写它,我的doclet仍在某种前5.0兼容模式下工作。这就是我在" Javadoc 5.0中的新事物"页面中发现的内容:

与自定义Doclets

不兼容

在5.0之前编写的自定义doclet在使用5.0中使用新语言功能的源文件上运行时,将存在兼容性问题。新语言功能:Doclet API和标准Doclet进行了修订,以处理新的5.0语言功能 - 仿制药,枚举,varargs和注释。为了处理这些功能,还需要修改自定义doclet。Javadoc工具在可能的范围内尝试出示所谓的"遗产" doclets,以了解该程序 1)继续使用5.0前源代码,并且 2)匹配他们对5.0源代码的期望。因此,例如,类型参数和类型参数是从通用构造中剥离的,类型变量和通配符类型被其擦除取代,classDoc.fields()将返回枚举常数。

解决!它确实在5.0前兼容模式下工作。我要做的就是将以下方法添加到我的自定义doclet:

public static LanguageVersion languageVersion() {
    return LanguageVersion.JAVA_1_5;
}

相关内容

  • 没有找到相关文章

最新更新