• 中文
    • English
  • 注册
  • 查看作者
  • Error Prone 通过检测常见错误帮助改善Java代码

    是谷歌开源的一个Java编译插件,可以在编译时进行静态分析、bug检测,或者对可能的优化提出建议。插件中包括了超过500个
    ,并且允许第三方和自定义插件。检查到问题之后,Error Prone能够将问题通过warning显示出来或者用预定义的解决方案自动修改代码。Error Prone 支持 Java 8、11,以及17,可以被用来修复bug或者大规模重构。文档中提供了使用 Maven、Bazel、Ant以及Grandle的安装和配置教程。需要将Error Prone在编译器中配置为annotation processor(注解处理器),下面是通过Maven创建测试工程的示例:

    接下来可以创建一个示例类。下面的方法使用了
    方法来对比两个数组,更准确地说,此处所比较的是对象本身而不是数组的内容。

    执行
    触发Error Prone 分析,下面是运行结果中的错误信息中:

    报出了
    错误,Error Prone的建议是修改实现方式,以比较数组的内容而不是比较对象。

    报错不仅可以帮助改善代码,也可以让Error Prone自动应用解决方案。
    参数的应用应该包含由逗号分隔开的bug模式列表,在上面的情况中,只有ArrayEquals解决方案用于这段代码。
    参数用于具体定位解决方案文件位置,在当前情境中是修改了源文件:

    现在,在执行
    之后,类文件被自动修改为:

    文档里提供了更多关于
    的信息。除了内置的bug模式,也可以使用例如
    等第三方发布的插件,或创建自定义插件。内置规则的源码提供了多种可用于定义插件的不同
    模板。例如,自定义一个能够用新的JUnit 5 @BeforeEach注解器代替旧版@Before JUnit注解器的Error Prone插件。

    和前文例子不同,自定义的Error Prone插件应该被放置于Maven模块。Error Prone通过
    机制来加载bug检测。这类之际通常一定的配置,然而谷歌的
    项目借助@AutoService注解简化了配置工作。@BugPattern注解用于定义bug的名称、简介以及严重性。在下面的例子中,如果没有找到@Before 注解器会返回
    ,否则
    会用@BeforeEach注解替代@Before注解。

    构建自定义Error Prone 插件的时候都是需要Error Prone和AutoService依赖的。

    AutoService应该被配置为一个注解处理器。

    现在,自定义的Error Prone 插件可以通过
    命令,安装在本地的Maven仓库。执行命令后,示例工程应该会被配置为使用新的自定义插件作为注解处理器。

    新的
    应该被加入到了Error Prone 分析中。

    添加一个示例测试类,其中包含

    的两个注解。

    运行
    时,新的自定义Error Prone插件将用
    注解替换
    注解。

    Error Prone所使用的Java internal目前处于隐藏状态,可能会导致如下错误:

    Maven的
    是通过在项目根目录下创建.mvn目录来暴露Java internal,在目录中创建一个jvm.config文件,其中配置如下:

    或者可以将

    参数配置添加到Maven编译器插件的pom文件中:

    更多在Bazel、Ant和Gradle中使用Error Prone的信息可参见

    相关阅读:

  • 0
  • 0
  • 0
  • 8
  • 请登录之后再进行评论

    登录
  • 任务
  • 实时动态
  • 发布
  • 单栏布局 侧栏位置: