2016-05-21 7 views
0

Я использую Findbugs вместе с аннотацией javax.annotation.Nonnull. В следующий методFindbugs NP_ARGUMENT_MIGHT_BE_NULL не запускается, как ожидалось

@Nonnull 
public String methodA(@Nonnull String foo, @Nonnull Integer bar) { 
    // missing checkNotNull(foo) 
    // missing checkNotNull(bar) 

    int fooLen = foo.length(); // did not check that foo is non-null 

    return (bar < fooLen)? foo : null; // did not check that bar is non-null 
} 

PARAMS Foo и бар объявлены ненулевым, и они впоследствии разыменовываются без первого проверяемого, если они равны нулю. Когда я запускаю Findbugs против кода (используя плагин Gradle Findbugs), отчет Findbugs не включает ожидаемое предупреждение NP_ARGUMENT_MIGHT_BE_NULL. С сайта FindBugs, описание NP_ARGUMENT_MIGHT_BE_NULL:

NP: Метод не проверяет нулевой аргумент (NP_ARGUMENT_MIGHT_BE_NULL)

параметр для этого метода было определено как значение, которое всегда должно быть проверено, чтобы увидеть независимо от того, является оно или нет, но оно разыменовывается без предшествующей нулевой проверки.

Что я делаю неправильно?

ответ

0

Вы указали, что foo и bar являются @Nonnull. Это говорит findbugs, чтобы посмотреть на вызовы methodA для возможности аргументов null и отклонить их, если он их найдет.

В методе, именно потому, что они аннотируются @Nonnull, FindBugs предполагает, что они не могут быть null и, следовательно, позволяет использовать их непосредственно.

Возможно, вам потребуется аннотировать параметры @CheckForNull за поведение, которое вы ожидаете.

+0

Нет, я думаю, что некоторая конфигурация отсутствует. Раньше, используя Findbugs в Eclipse или как плагин Maven, он выдавал бы предупреждение NP_ARGUMENT_MIGHT_BE_NULL. Кроме того, изменение «@» Nonnull на «@» CheckForNull не вызвало предупреждения. –

+0

@ user664894 Если вы действительно так думаете, не стесняйтесь обновлять свой вопрос с помощью конфигурации Findbugs. Все, что я могу сказать, это то, что он работает для меня. ' @ CheckForNull' предупреждает правильно. –

 Смежные вопросы

  • Нет связанных вопросов^_^