Есть ли способ игнорировать одно предупреждение FindBugs?

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

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

Ответ 1

Первоначальный подход FindBugs включает в себя файлы конфигурации XML или фильтры. Это действительно менее удобно, чем решение 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.

Ответ 2

Как и другие, вы можете использовать аннотацию @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

Ответ 3

Вот более полный пример фильтра 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 с помощью File-> Другое Settings-> По умолчанию Settings-> Другое Settings-> FindBugs-IDEA → Filter-> Фильтр исключения files- > Добавить.

Ответ 4

Обновить Gradle

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

Найти отчет FindBugs

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

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

найти ошибки

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

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

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

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX")

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

Ответ 5

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

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

Ответ 6

Я собираюсь оставить это здесь: fooobar.com/info/40494/...

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

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

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

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