前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpotBugs注解SuppressWarnings在Java&Groovy中的应用

SpotBugs注解SuppressWarnings在Java&Groovy中的应用

作者头像
FunTester
发布2020-12-01 11:27:48
1.6K0
发布2020-12-01 11:27:48
举报
文章被收录于专栏:FunTester

在最近做Java服务端代码静态测试过程中,目前采取的方案如下:

  • 测试拉取代码到本地。使用IDE:Intellij,插件:SpotBugs(无增强插件)进行静态测试,更新BUG信息,维护文档和代码中的注解。
  • 开发修复禅道BUG
  • QA拉取修复代码分支,与本地分支(含有抑制注解)进行合并,然后进行BUG回归。
  • 循环以上过程,直至该分支代码零BUG

纪念一下

我在自己的项目(Java&Groovy)中实验通过,分享一下在两种语言的实践经验。

总体来讲,Java还是很方便的,Intellij自带的修复提示基本满足需求,Groovy代码验证误报的较多,使用Intellij修复提醒功能时,几乎是瘫痪状态。

  • 关于错误类型及其详解,网上很多人都写了,我建议大家去看官网文档:「https://spotbugs.readthedocs.io/en/stable/bugDescriptions.html」,如果遇到有趣的BUG,我也会及时更新分享。

添加依赖

使用SpotBugs注解SuppressWarnings需要添加依赖。

Gradle

代码语言:javascript
复制
// https://mvnrepository.com/artifact/com.google.code.findbugs/annotations
compile group: 'com.google.code.findbugs', name: 'annotations', version: '3.0.1'

Maven

<!-- https://mvnrepository.com/artifact/com.google.code.findbugs/annotations --> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> <version>3.0.1</version> </dependency>

Java

首先看一个BUG,会在源码的位置看到一个小虫子(颜色代表不同级别),代码下面会出现波浪线提醒。

点击小虫子图标或者使用Intellij快捷提示都可以见到下面的修复选项。

一共四个选项,两个条件:clearsuppress。前者是清楚这个错误,但只是清除单次测试结果,不影响再次扫描。后者是添加注解uppressFBWarnings("DM_DEFAULT_ENCODING"),引号内容是错误类型,具体解释在SpotBugs面板的右侧,内容跟官网文档一致。

使用@SuppressFBWarnings("DM_DEFAULT_ENCODING")注解有三个地方:1、针对某个变量(成员变量或者类变量);2、方法;3、类(据我测试这个应该范围是生成的classes文件,内部类啥的应该都会起作用)。

注解后面String字符串是错误类型,下面是Java中注解的单个类型和多个类型的语法:

  • 单个:@SuppressFBWarnings("DM_DEFAULT_ENCODING")或者@SuppressFBWarnings(value = "ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
  • 多个@SuppressFBWarnings({"MS_SHOULD_BE_FINAL","NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE", "NS_DANGEROUS_NON_SHORT_CIRCUIT"})

Groovy

功能操作都是一样的,但是Groovy语言环境中,不能自动添加@SuppressFBWarnings("DM_DEFAULT_ENCODING"),需要手动添加,着实非常不爽,而且误报率较高。

在注解的语法上有些许的区别(多个错误类型),如下:

  • 单个:@SuppressFBWarnings("DM_DEFAULT_ENCODING")或者@SuppressFBWarnings(value = "ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
  • 多个:@SuppressFBWarnings(["HE_EQUALS_USE_HASHCODE", "EQ_UNUSUAL", "MS_SHOULD_BE_FINAL"])

这是因为JavaGroovy对于定义数组语法的差异导致的,Java使用{}Groovy使用[]


公众号「FunTester」,原创分享爱好者,腾讯云、开源中国和掘金社区首页推荐,知乎八级强者,欢迎关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加依赖
    • Gradle
      • Maven
      • <!-- https://mvnrepository.com/artifact/com.google.code.findbugs/annotations --> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>annotations</artifactId> <version>3.0.1</version> </dependency>
      • Java
      • Groovy
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档