JEP 217:注释管道 2.0
概括
重新设计javac
注释管道,以更好地满足注释和处理注释的工具的要求。
目标
-
编译器应该在注释和类型注释方面表现正确:发出的类文件应该具有所有类型注释的格式正确的属性。
-
编译时反射(
javax.lang.model
和javax.annotation.processing
)应该正确处理签名可见位置的所有注释。 -
运行时反射(核心反射)应该与类文件中的注释一起正常工作。
-
西洋跳棋框架必须继续发挥作用。
-
Java 编译器 API 应继续按设计工作。
非目标
不会添加新的语言功能或 API。更新对相关工具(例如javadoc
和)中注释的支持并不是我们的目标javap
。
动机
Java SE 8 引入了两个新的注释功能:重复注释 (JEP 120)和Java 类型注释 (JSR 308 / JEP 104)。此外,Lambda 表达式 (JSR 335 / JEP 126)添加了新的注释语法位置。这些功能在最初构思注释管道时并不存在javac
,但可以组合在一起,从而产生如下模式:
Function<String, String> fss = (@Anno @Anno String s) -> s;
现有的注释管道无法立即处理此类情况;因此,为了适应新的用例,原来的设计已经被扩展,导致实施变得脆弱且难以维护。这项工作的目标是用新的架构取代这种老化的架构,以更直接的方式支持新的用例,从而产生更正确和可维护的代码。
描述
重构javac
注释管道。除非我们修复错误并提高正确性,否则这不应该在外部引人注目。第一步是提高 测试覆盖率,以便我们可以衡量和评估我们的退出标准。之后是一系列增量重构。这项工作将在 OpenJDK Annotations Pipeline 2.0 项目中完成。
该javadoc
工具存在一些与类型注释相关的问题。然而,作为Javadoc.Next 项目javadoc
的一部分,正在进行重要的工作。该工作的一部分包括转换为使用API 而不是旧的API。因此,确保正确呈现注释(包括类型注释)并不是该项目的目标。作为 JavaDoc.Next 项目的一部分,预计将得到增强,以利用 API 更新,这是该项目的目标。javadoc``javax.lang.model``com.sun.javadoc``javadoc``javadoc``javax.lang.model
测试
注释的大量端到端用例已经得到很好的覆盖。这包括 JCK 和 langtools 回归测试。这项工作的一个重要部分是开发进一步的测试,以确保成功指标的可衡量性。
如上所述,我们将创建测试来测试 Java SE 8 中新功能的交集。