如何抑制同一行代码的多个 FindBugs 警告

问题描述 投票:0回答:4

我最近发现 FindBugs 的

@edu.umd.cs.findbugs.annotations.SuppressWarnings
注释非常酷,基本上可以让你告诉 FindBugs 忽略某些警告。

我已经按照他们的建议成功实现了我自己的 SLF4J 绑定,采用

slf4j-simple
并使用您自己的记录器和记录器工厂绑定对其进行修改,我很高兴地说它就像一个魅力。

我刚刚在包含此 SLF4J 绑定的包上运行 find bugs,它抱怨原始

StaticLoggerBinder
作者 (Ceki Gulku) 编写的某行代码:

// 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 警告?

java slf4j findbugs
4个回答
24
投票

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

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

与标准

java.lang.SuppressWarnings
一样,FindBugs 版本也 有一个
String[]
类型的参数。对于单个值,可以省略花括号以使生活更轻松。


12
投票

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")

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";

0
投票

如果您来这里是为了寻找 Kotlin 的解决方案: 那里的花括号不起作用。编译器会抱怨

意外的标记(使用“;”分隔同一行上的表达式)

真正起作用的是:

@SuppressWarnings("MS_SHOULD_BE_FINAL", "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
© www.soinside.com 2019 - 2024. All rights reserved.