在eclipse中使用jsr305注释的Findbugs没有发现错误

时间:2009-08-24 11:35:26

标签: eclipse annotations findbugs jsr305

我一直在尝试使用jsr 305注释与Findbugs一起使用,特别是@CheckForNull注释,它可以避免我刚刚发现给客户的错误。我已将jsr305.jar和annotations.jar添加到我的构建路径中,但findbugs找不到错误。我正在使用Eclipse和Eclipse Findbugs插件。下面是一些示例代码,它显示了相同的错误,但是当我运行findbugs时却没有找到错误。我在Eclipse Galileo和Ganymede中试过这个。

public class FindBugsAnnotationsTest {

    ArrayList<String> canBeNull;

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

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

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

1 个答案:

答案 0 :(得分: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