2012-06-05 42 views
12

我最近发现了FindBugs的@edu.umd.cs.findbugs.annotations.SuppressWarnings注释,它非常酷,并允许您基本告诉FindBugs忽略某些警告。如何在同一行代码中抑制多个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警告?

+0

建议:使用'SuppressFBWarnings'所以你可以象其他任何类,而不是使用完全合格的名称将其导入。 –

回答

17

只是列出所有的警告标识在阵列中,单一注解中:

@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

试试这个:

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

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