代码之家  ›  专栏  ›  技术社区  ›  Ben S

是否有方法忽略单个findbugs警告?

  •  166
  • Ben S  · 技术社区  · 15 年前

    对于PMD,如果您想忽略特定的警告,可以使用 // NOPMD 将该行忽略。

    对于findbugs有类似的东西吗?

    6 回复  |  直到 6 年前
        1
  •  271
  •   Little Helper    7 年前

    findbugs初始方法涉及XML配置文件aka filters . 这确实比PMD解决方案不方便,但是findbugs在字节码上工作,而不是在源代码上工作,因此注释显然不是一个选项。例子:

    <Match>
       <Class name="com.mycompany.Foo" />
       <Method name="bar" />
       <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
    </Match>
    

    然而,为了解决这个问题,findbugs后来引入了另一个基于 annotations (见 SuppressFBWarnings )可以在类或方法级别使用(我认为比XML更方便)。示例(也许不是最好的示例,但是,它只是一个示例):

    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
        value="HE_EQUALS_USE_HASHCODE", 
        justification="I know what I'm doing")
    

    注意,由于findbugs 3.0.0 SuppressWarnings 已弃用,赞成 @SuppressFBWarnings 因为Java的名字冲突 取消警告 .

        2
  •  15
  •   hinneLinks    7 年前

    正如其他人提到的,您可以使用 @SuppressFBWarnings 注释。 如果您不想或不能向代码添加另一个依赖项,您可以自己向代码添加注释,findbugs不关心注释在哪个包中。

    @Retention(RetentionPolicy.CLASS)
    public @interface SuppressFBWarnings {
        /**
         * The set of FindBugs warnings that are to be suppressed in
         * annotated element. The value can be a bug category, kind or pattern.
         *
         */
        String[] value() default {};
    
        /**
         * Optional documentation of the reason why the warning is suppressed
         */
        String justification() default "";
    }
    

    来源: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88

        3
  •  15
  •   mbonness    6 年前

    下面是一个更完整的XML过滤器示例(上面的示例本身不起作用,因为它只显示了一个片段,并且缺少 <FindBugsFilter> 开始和结束标记):

    <FindBugsFilter>
        <Match>
            <Class name="com.mycompany.foo" />
            <Method name="bar" />
            <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
        </Match>
    </FindBugsFilter>
    

    如果您使用的是Android Studio FindBugs插件,请使用文件->其他设置->默认设置->其他设置->FindBugs想法->筛选器->排除筛选器文件->添加浏览到XML筛选器文件。

        4
  •  7
  •   anataliocs    7 年前

    更新级差

    dependencies {
        compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
    }
    

    找到findbugs报告

    文件:///users/your_user/ideaprojects/projectname/build/reports/findbugs/main.html

    查找特定消息

    find bugs

    导入注释的正确版本

    import edu.umd.cs.findbugs.annotations.SuppressWarnings;
    

    在有问题的代码的正上方添加注释

    @SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")
    

    有关详细信息,请参阅此处: findbugs Spring Annotation

        5
  •  4
  •   steve    6 年前

    在撰写本文时(2018年5月),findbugs似乎已被 SpotBugs . 使用 SuppressFBWarnings 注释需要用Java 8或更高版本编译代码,并引入编译时依赖性。 spotbugs-annotations.jar .

    使用过滤器文件来过滤spotbugs规则没有这样的问题。文件是 here .

        6
  •  -6
  •   00500005    7 年前

    我要把这个留在这里: https://stackoverflow.com/a/14509697/1356953

    请注意,这适用于 java.lang.SuppressWarnings 所以不需要使用单独的注释。

    @字段上的SuppressWarnings只抑制findbugs警告 为该字段声明报告,而不是与 那个领域。

    例如,这将取消“字段仅设置为空” 警告:

    @SuppressWarnings(“uwf_null_field”)字符串s=null;我认为最好 您可以做的是将带有警告的代码隔离到最小的 方法,然后取消对整个方法的警告。