2013-07-22 108 views
4

我試圖消除假陽性DLS_DEAD_LOCAL_STOREDLS_DEAD_LOCAL_STORE SuppressWarnings FindBugs的假陽性

這是我迄今爲止嘗試:

@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。

回答

6

更多谷歌搜索+實驗,我終於想出了一個辦法做到這一點。

檢查Section 6根據http://findbugs.sourceforge.net/manual/filter.html

您需要創建自己的XML文件,其中包含所有自定義supressions。 然後,您需要讓build.xml文件瞭解此文件通過findbugs.exclude.filter

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

無需添加@SuppressWarnings標籤的方法,這一次是那裏的XML。

希望這可以幫助別人!

+0

如果您正在尋找一個解決方案來解決Android編譯,添加下列內容的build.gradle:FindBugs的{ excludeFilter =文件(「findBugsFilter.xml」) } – Abhijeet

3

我只是有這個代碼相同的問題:

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

我想保持這些註釋的範圍儘可能小,這樣他們就不會抑制真正的問題。這裏似乎有必要註釋整個方法。

+0

的實際問題似乎是FindBugs的不允許在使用Sun/Oracle的javac編譯器時,如[在此解釋](http://findbugs.sourceforge.net/bugDescriptions.html),爲** final **局部變量(如您的示例中)抑制'DLS_DEAD_LOCAL_STORE'。 –

2

As explained in FindBugs documentation,顯然Sun/Oracle的javac編譯器經常爲final局部變量生成死區。這些DLS_DEAD_LOCAL_STORE警告不容易被抑制。

不知道爲什麼XML過濾器確實工作(如接受的答案),但。