DLS_DEAD_LOCAL_STORE SuppressWarnings FindBugs误报

时间:2013-07-22 22:34:15

标签: java findbugs spring-annotations suppress-warnings

我正试图消除DLS_DEAD_LOCAL_STORE的误报

这是我到目前为止所尝试的内容:

@SuppressWarnings("DLS_DEAD_LOCAL_STORE")

@edu.umd.cs.findbugs.annotations.SuppressWarnings("DLS_DEAD_LOCAL_STORE")

(基于SuppressWarnings not working on FindBugs

@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "DLS_DEAD_LOCAL_STORE", justification = "please go away")

基于http://osdir.com/ml/java-findbugs-general/2010-06/msg00017.html

但是没有一个选择有帮助。请指教。 使用Eclipse Indigo。

3 个答案:

答案 0 :(得分:6)

更多谷歌搜索+实验,我终于找到了一种方法来做到这一点。

http://findbugs.sourceforge.net/manual/filter.html下查看Section 6

您需要创建自己的XML文件,其中包含所有自定义的supressions。 然后,您需要通过findbugs.exclude.filter

让build.xml文件了解此文件
 <Match>
   <Class name="com.foobar.MyClass" />
   <Method name="someMethod" />
   <Bug pattern="DLS_DEAD_LOCAL_STORE" />
 </Match>

在XML中存在@SuppressWarnings标记后,无需添加{{1}}标记。

希望这有助于某人!

答案 1 :(得分:4)

我对此代码遇到了同样的问题:

@Test
public void testSomething() {

    @SuppressWarnings("unused")
    @SuppressFBWarnings(value = "DLS_DEAD_LOCAL_STORE")
    final SomeMockClass mock = new SomeMockClass();
    ...
    }
}

@SuppressFBWarnings在这里不起作用。

此处的解决方案是将@SuppressFBWarnings移至方法级别:

@Test
@SuppressFBWarnings(value = "DLS_DEAD_LOCAL_STORE")
public void testSomething() {

    @SuppressWarnings("unused")
    final SomeMockClass mock = new SomeMockClass();
    ...
    }
}

我希望尽可能减少这些注释的范围,因此它们不会抑制实际问题。这里似乎有必要注释整个方法。

答案 2 :(得分:2)

As explained in FindBugs documentation,显然Sun / Oracle的javac编译器经常为final局部变量生成死存储。无法轻易抑制这些DLS_DEAD_LOCAL_STORE警告。

不确定为什么XML过滤器可以正常工作(如在接受的答案中)。