2009-08-24 55 views
3

我一直在試驗用於Findbugs的jsr 305註釋,特別是@CheckForNull註釋,它可以避免我剛剛發現給客戶的錯誤。我已經添加jsr305.jar和annotations.jar到我的構建路徑,但錯誤沒有被發現的FindBugs。我正在Eclipse上使用Eclipse Findbugs插件。下面是一些示例代碼,它顯示了相同的錯誤,但是當我運行findbugs時發現錯誤。我已經在Eclipse Galileo和Ganymede中嘗試了這一點。在eclipse中使用jsr305註釋的Findbug沒有發現錯誤

public class FindBugsAnnotationsTest { 

    ArrayList<String> canBeNull; 

    @CheckForNull 
    public List<String> getCanBeNull() { 
     return canBeNull; 
    } 

    public void shouldGetFindbugsWarning() { 
    canBeNull.add("a string"); 

     getCanBeNull().add("a string"); 
    } 
} 

回答

2

這可能很明顯,但我認爲你的問題是與Eclipse(特別是FindBugs插件),而不是FindBugs本身。

您可能會考慮從命令行運行FindBugs以消除任何Eclipse問題,並確保FindBugs自行正確運行。瞭解如何在獨立模式下運行FindBugs將在您的IDE配置不正確時爲您提供回退。

我在一個名爲FindBugsAnnotationsTest.java文件保存你的源代碼,添加進口ListArrayListCheckForNull,編譯和運行FindBugs的1.3.9。 FindBugs的產生有關空值幾個警告:

 
M D NP: Possible null pointer dereference in FindBugsAnnotationsTest.shouldGetFindbugsWarning() due to return value of called method Dereferenced at FindBugsAnnotationsTest.java:[line 18] 
M C UwF: Unwritten field: FindBugsAnnotationsTest.canBeNull At FindBugsAnnotationsTest.java:[line 12] 
M C NP: Read of unwritten field canBeNull in FindBugsAnnotationsTest.shouldGetFindbugsWarning() At FindBugsAnnotationsTest.java:[line 16] 
Warnings generated: 3 

這是我加入的FindBugsAnnotationsTest.java頂部的進口:

import java.util.ArrayList; 
import java.util.List; 
import edu.umd.cs.findbugs.annotations.CheckForNull; 

命令:

javac -d . -classpath ${FINDBUGS_HOME}/lib/findbugs.jar FindBugsAnnotationsTest.java 
${FINDBUGS_HOME}/bin/findbugs FindBugsAnnotationsTest.class 

${FINDBUGS_HOME}是其中的目錄Findbugs 1.3.9已安裝。 javac被假定爲路徑上。

注:我使用的findbugs.jar代替annotations.jarjsr305.jar,但我得到這個命令相同的結果:

javac -d . -classpath ${FINDBUGS_HOME}/lib/annotations.jar:${FINDBUGS_HOME}/lib/jsr305.jar FindBugsAnnotationsTest.java 
相關問題