2012-06-04 101 views
2

我在我的Eclipse項目上運行了FindBugs,並且得到了一個潛在的錯誤警告,我想爲特定的原因(在這個問題的上下文之外)進行抑制。下面的代碼:SuppressWarnings不能在FindBugs上工作

public class LogItem { 
    private String name; 

    private void setName(final String nm) { 
     name = nm; 
    } 
} 

當您在這個類中運行FindBugs的是讓你在name = nm賦值操作的警告,他說:Unread field: com.me.myorg.LogItem.name

所以我嘗試添加這樣的:在Eclipse

private void setName(final String nm) { 
     @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "NP", justification = "Because I can") 
     name = nm; 
    } 

當我這樣做,我得到一個語法(編譯)錯誤,他說:

Duplicate local variable nm; name cannot be resolved to a type.

於是我嘗試添加了FindBugs的SuppressWarnings在該領域本身,但在該類上重新運行FindBugs之後,FindBugs仍然抱怨同一行代碼並出於同樣的原因。我甚至嘗試將SuppressWarnings添加到setName方法中,但仍然沒有區別。

How(究竟是!)我是否可以使用這個註釋來安靜地搜索FindBugs?!?

回答

2

將註解放在字段上並修正錯誤標識符。這個工作對我來說:

public class LogItem { 
    @edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_FIELD") 
    private String name; 
+1

工作就像一個魅力! – IAmYourFaja

+0

如何導入它,我需要爲gradle依賴添加什麼? –

2

我一直使用內置的java.lang.SuppressWarnings,而不是FindBugs,它到目前爲止工作。另外,對於特定的聲明,您可能需要將該聲明保留在註釋之後的同一行上。像

@SuppressWarnings("NP") name = nm; 

另外,你確定"NP"是一個有效的警告標識符嗎?如果沒有其他東西可以工作,我會嘗試"unused"

+0

感謝@Peter但這些建議都在工作。當我將FindBugs'SuppressWarnings'替換爲您的答案中包含的確切代碼行時,我仍然收到一個編譯器錯誤:'此行有多個標記 - 重複的本地變量nm - name無法解析爲類型 - 標記上的語法錯誤「= 「,刪除此令牌 - 未讀字段:com.me.myorg.LogItem.name'。有什麼想法嗎? – IAmYourFaja

+0

「重複的局部變量」表明你的代碼中有一些東西沒有發佈在你的問題中? –

+0

@LouisWasserman,我從那個類中得到了與eclipse相同的錯誤。解析器似乎對使用語句時註釋的含義做出了錯誤的猜測。 – TimK