Findbugs, использующие аннотации jsr305 в eclipse, не находят ошибок - PullRequest
3 голосов
/ 24 августа 2009

Я экспериментировал с аннотациями jsr 305 для использования с Findbugs, в частности с аннотацией @CheckForNull, которая позволила бы избежать ошибки, которую я только что обнаружил, делая ее для клиентов.Я добавил jsr305.jar и annotations.jar в путь сборки, но ошибки не обнаруживаются с помощью findbugs.Я использую Eclipse с плагином Eclipse Findbugs.Ниже приведен пример кода, который показывает ту же ошибку, но не когда я запускаю findbugs поверх нее, найдите ошибку.Я пробовал это в «Затмении Галилео» и «Ганимеде».

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 Ответ

2 голосов
/ 12 сентября 2009

Это может быть очевидно, но я думаю, что ваши проблемы связаны с 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
...