Поиск ошибок с использованием аннотаций jsr305 в eclipse не находит ошибок

StackOverflow https://stackoverflow.com/questions/1321873

Вопрос

Я экспериментировал с аннотациями 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");
    }
}
Это было полезно?

Решение

Это может быть очевидно, но я думаю, что ваши проблемы связаны с 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top