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



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



есть ли что-то подобное для FindBugs?

591   6  

6 ответов:

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

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

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

Если вы используете плагин FindBugs для Android Studio, перейдите к файлу фильтра XML с помощью File->Other Settings->Default Settings->Other Settings->FindBugs-IDEA->Filter->Exclude filter files->Add.

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

@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

Ш Обновление

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

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

file:///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 Весна Аннотация

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

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

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

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

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

например, это подавляет поле "только когда-либо значение null" внимание:

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

Comments

    Ничего не найдено.