11

我正在尝试消除 DLS_DEAD_LOCAL_STORE 的误报

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

@SuppressWarnings("DLS_DEAD_LOCAL_STORE")

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

(基于SuppressWarnings 不适用于 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 靛蓝。

4

3 回答 3

9

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

检查http://findbugs.sourceforge.net/manual/filter.htmlSection 6_

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

 <Match>
   <Class name="com.foobar.MyClass" />
   <Method name="someMethod" />
   <Bug pattern="DLS_DEAD_LOCAL_STORE" />
 </Match>

@SuppressWarnings一旦 XML 中有此标记,则无需在方法中添加标记。

希望这对某人有帮助!

于 2013-07-22T23:17:09.157 回答
7

我对这段代码也有同样的问题:

@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();
    ...
    }
}

我喜欢让这些注释的范围尽可能小,这样它们就不会压制真正的问题。这里似乎有必要对整个方法进行注释。

于 2014-05-25T17:01:25.077 回答
3

正如 FindBugs 文档中所解释的,显然 Sun/Oracle 的 javac 编译器经常为final局部变量生成死存储。这些 DLS_DEAD_LOCAL_STORE 警告不容易被抑制。

不过,不确定为什么 XML 过滤器确实有效(如已接受的答案)。

于 2016-07-27T14:48:42.520 回答