【问题标题】:Pluggable Type Checkers and Checkers framework, is really needed all this setup?Pluggable Type Checkers 和 Checkers 框架,真的需要所有这些设置吗?
【发布时间】:2019-12-18 15:37:54
【问题描述】:

我正在尝试了解 Checker Framework 如何实现可插入类型检查器。 通过阅读文档,

Checker Framework (Maven)

我看到其中涉及很多设置,在我看来要么已过时,要么未完全维护。

据我所知,Java 8 在 JSR-308 和 JSR-269 上支持类型注释和可插入类型检查器,允许接口在几乎每个元素上创建自定义注释,并使用接口的 sn-p 处理它javac(-processor)上带有简单标志的代码,maven通过META-INF/services/javax.annotation.processing.Processor支持

那么为什么文档说明 Checker 需要这么多的定制..?:

  - com.google.errorprone.javac "error-prone" jdk if javac should support custom annotation processors (JSR-269)?
  - maven dependency plugin
  - mvn compiler plugin with annotationProcessorPaths (which I understand it overrides anything from the META-INF file) instead of `META-INF/services/javax.annotation.processing.Processor`

我认为自 Java 8 功能以来,Checker 框架实际上一直是自定义注释处理器的集合。是这样吗?似乎不再需要启用编译器、创建自定义检查 (JSR-269) 和启用 /* @Nullable */ 等...我很乐意纠正

【问题讨论】:

    标签: java spring-boot annotation-processing jsr checker-framework


    【解决方案1】:

    我看到其中涉及很多设置,在我看来要么已过时,要么未完全维护。

    具体来说,什么看起来已经过时或“没有完全维护”?你的证据是什么? 如果您只是做出未经证实的断言,社区将无法帮助您。

    据我所知,Java 8 在 JSR-308 和 JSR-269 上支持类型注释和可插入类型检查器

    您的阅读不正确。 JSR 308 支持类型注释,但 JSR 269 不支持可插入类型检查器。您需要第三方工具(例如 Checker Framework)来执行可插入类型检查。

    你能指出导致你得出这个结论的具体文本吗?细节会有所帮助,而不仅仅是没有支持的断言。

    启用/* @Nullable */

    对 cme​​ts 中注释的支持是 ended 20 months ago。您能否指出导致您对 cme​​ts 中的注释提出问题的文本?

    【讨论】:

    • 您好!我说“在我看来”,由于我的错误假设,我有一种感觉,所有这些都不再需要了。如果您真的需要用于可插入类型检查的检查器框架,那么一切都有意义。但是仅仅通过阅读(抱歉不能告诉你这些网站,阅读了很多关于这个主题的内容)我认为你可以在一个 maven 项目的 META-INF 上删除注释处理器,而不需要任何特殊的 frameworkm 和 javac 支持。为什么除了注释处理器代码之外还需要第三方工具?
    • 我的意思是不内置 javac 支持 -processor 标志和 meta-inf/processors 机制?
    • Java 提供了一个注解处理接口(通过-processor 调用),它访问包、字段和方法上的声明注解。这样的注释处理器不能检查源代码,也不能检查源代码中的注释。 Checker Framework 是一个注释处理器,它为整个源代码提供访问者,因此它可以用于可插入的类型检查。 (所有这些都与处理器自动发现或 Maven 调用正交,这对任何注释处理器都是一样的。)
    • 谢谢!但我仍然有一些疑问。在此示例中,baeldung.com/java-annotation-processing-builder,源代码中的自定义注释得到了很好的处理。另外,如果Checker最终是处理器接口下的注解处理器,并且META-INF机制是正交的,为什么还需要com.google.errorprone.javac和mvn编译器插件以及annotationProcessorPaths呢?
    • 没问题,这就是 Stack Overflow 的用途。
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多