代码之家  ›  专栏  ›  技术社区  ›  Robin

在Eclipse中使用JSR305注释的findbugs找不到错误

  •  3
  • Robin  · 技术社区  · 15 年前

    我一直在试验用于findbugs的JSR 305注释,特别是@checkfornull注释,它可以避免我刚刚发现的向客户发出的错误。我在构建路径中添加了jsr305.jar和annotations.jar,但是findbugs没有发现这些bug。我正在使用Eclipse和Eclipse FindBugs插件。下面是一些示例代码,它显示了相同的bug,但当我在上面运行findbugs时没有发现这个bug。我在EclipseGalileo和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 回复  |  直到 15 年前
        1
  •  2
  •   Greg Mattes    15 年前

    这可能很明显,但我认为您的问题与Eclipse(可能是findbugs插件)有关,而不是findbugs本身。

    您可以考虑从命令行运行findbugs,以消除任何Eclipse问题,并确保findbugs自己正确运行。知道如何在独立模式下运行findbugs会在您的IDE配置不正确时给您一个回退。

    我把你的源代码保存在一个名为 FindBugsAnnotationsTest.java ,为添加了导入 List , ArrayList CheckForNull ,编译并运行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.jar jsr305.jar 但是我用这个命令得到了相同的结果:

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