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

时间:2012-06-05 11:24:50

标签: java slf4j findbugs

我最近发现FindBugs的@edu.umd.cs.findbugs.annotations.SuppressWarnings注释非常酷,并且允许您基本上告诉FindBugs忽略某些警告。

我已经成功实施了我自己的SLF4J绑定,他们建议采用slf4j-simple并使用您自己的记录器和记录器工厂绑定对其进行修改,我很高兴地说它就像魅力一样。

我刚刚在包含此SLF4J绑定的包上运行发现错误,它抱怨原始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警告?

3 个答案:

答案 0 :(得分:20)

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

@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版本也has a parameter of type String[]。对于单个值,可以省略花括号,以使生活更轻松。

答案 1 :(得分:4)

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

答案 2 :(得分: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";