跳到主要内容

JEP 217:注释管道 2.0

概括

重新设计javac注释管道,以更好地满足注释和处理注释的工具的要求。

目标

  • 编译器应该在注释和类型注释方面表现正确:发出的类文件应该具有所有类型注释的格式正确的属性。

  • 编译时反射(javax.lang.modeljavax.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 中新功能的交集。