Есть ли способ игнорировать одно предупреждение FindBugs? - PullRequest
171 голосов
/ 02 декабря 2009

В PMD, если вы хотите игнорировать конкретное предупреждение, вы можете использовать // NOPMD, чтобы игнорировать эту строку.

Есть ли что-то похожее для FindBugs?

Ответы [ 6 ]

281 голосов
/ 02 декабря 2009

Первоначальный подход FindBugs включает файлы конфигурации XML, известные как filters . Это действительно менее удобно, чем решение PMD, но FindBugs работает с байт-кодом, а не с исходным кодом, поэтому комментарии, очевидно, не вариант. Пример:

<Match>
   <Class name="com.mycompany.Foo" />
   <Method name="bar" />
   <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" />
</Match>

Однако, чтобы решить эту проблему, FindBugs позже представил другое решение на основе аннотаций (см. SuppressFBWarnings), которое можно использовать на уровне класса или на уровне метода (подробнее удобнее чем XML на мой взгляд). Пример (возможно, не самый лучший, но, ну, это всего лишь пример):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing")

Обратите внимание, что начиная с FindBugs 3.0.0 SuppressWarnings устарела в пользу @SuppressFBWarnings из-за конфликта имен с Java SuppressWarnings.

18 голосов
/ 06 июля 2017

Как уже упоминалось, вы можете использовать @SuppressFBWarnings Аннотация. Если вы не хотите или не можете добавить другую зависимость в свой код, вы можете добавить аннотацию к своему коду самостоятельно, Findbugs не заботится о том, в каком пакете находится аннотация.

@Retention(RetentionPolicy.CLASS)
public @interface SuppressFBWarnings {
    /**
     * The set of FindBugs warnings that are to be suppressed in
     * annotated element. The value can be a bug category, kind or pattern.
     *
     */
    String[] value() default {};

    /**
     * Optional documentation of the reason why the warning is suppressed
     */
    String justification() default "";
}

Источник: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88

15 голосов
/ 02 июня 2014

Вот более полный пример фильтра XML (приведенный выше пример сам по себе не будет работать, так как он просто показывает фрагмент кода и пропускает теги <FindBugsFilter> begin и end):

<FindBugsFilter>
    <Match>
        <Class name="com.mycompany.foo" />
        <Method name="bar" />
        <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
    </Match>
</FindBugsFilter>

Если вы используете плагин Android Studio FindBugs, перейдите к файлу XML-фильтра, выбрав Файл-> Другие настройки-> Настройки по умолчанию-> Другие настройки-> FindBugs-IDEA-> Фильтр-> Исключить файлы фильтра-> Добавить.

8 голосов
/ 17 августа 2016

Обновление Gradle

dependencies {
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0'
}

Найдите отчет FindBugs

Файл: ///Users/your_user/IdeaProjects/projectname/build/reports/findbugs/main.html

Найти конкретное сообщение

find bugs

Импорт правильной версии аннотации

import edu.umd.cs.findbugs.annotations.SuppressWarnings;

Добавить аннотацию прямо над кодом ошибки

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

См. Здесь для получения дополнительной информации: findbugs Spring Annotation

5 голосов
/ 25 мая 2018

На момент написания этой статьи (май 2018 г.) FindBugs, похоже, были заменены SpotBugs . Использование аннотации SuppressFBWarnings требует, чтобы ваш код компилировался с Java 8 или новее, и вводит зависимость времени компиляции от spotbugs-annotations.jar.

Использование фильтра для фильтрации правил SpotBugs не имеет таких проблем. Документация здесь .

0 голосов
/ 04 февраля 2016

Я собираюсь оставить это здесь: https://stackoverflow.com/a/14509697/1356953

Обратите внимание, что это работает с java.lang.SuppressWarnings, поэтому нет необходимости использовать отдельную аннотацию.

@ SuppressWarnings на поле подавляет только предупреждения findbugs сообщается для этой декларации поля, не каждое предупреждение, связанное с это поле.

Например, это подавляет «Поле только когда-либо установлено в нуль» предупреждение:

@ SuppressWarnings ("UWF_NULL_FIELD") String s = null; Я считаю лучшим Вы можете сделать, это изолировать код с предупреждением в наименьший метод, который вы можете, затем отключите предупреждение для всего метода.

...