如何禁止显示同一行代码的多个 FindBugs 警告

2022-09-02 09:28:13

我最近发现了FindBugs的注释,它非常酷,可以让你基本上告诉FindBugs忽略某些警告。@edu.umd.cs.findbugs.annotations.SuppressWarnings

我已经成功地实现了我自己的SLF4J绑定,按照他们的建议,使用你自己的记录器和记录器工厂绑定来获取和修改它,我很高兴地说它像一个魅力。slf4j-simple

我刚刚在包含此SLF4J绑定的软件包上运行了查找错误,并且它抱怨原作者(Ceki Gulku)编写的某行代码:StaticLoggerBinder

// to avoid constant folding by the compiler, this field must *not* be final.
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final

FindBugs抱怨说,这个字段“不是最终的,但应该是”。然而,SLF4J的(非常)聪明的人已经想到了这一点,并在上面提供了周围的评论。

因此,为了让FindBugs闭嘴,我按照我通常抑制FB警告的方式修改了代码:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
public static String REQUESTED_API_VERSION = "1.6";

当我清理我的项目并重新运行FindBugs时,我在同一行代码上收到第二个警告,这次是抱怨:

从不读取此字段。该字段是公共的或受保护的,因此它可能旨在与未被视为分析一部分的类一起使用。如果没有,请考虑将其从类中删除。

当我添加第二个警告抑制时:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public static String REQUESTED_API_VERSION = "1.6";

我从Eclipse得到一个编译器/语法错误:

重复的批注@SuppressWarnings。

如何在同一行代码上禁止显示多个 FindBugs 警告?


答案 1

只需在单个注释中列出数组中的所有警告标识符:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({
        "MS_SHOULD_BE_FINAL", 
        "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";

就像标准一样,FindBugs版本也有一个字符串[]类型的参数。对于单个值,可以省略大括号,以使生活更轻松。java.lang.SuppressWarnings


答案 2

FindBugs 3+ 样式:

  @SuppressFBWarnings(
    value={"NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE","STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"},
    justification="let me just make the build pass")

推荐