2009-12-02 3 views

ответ

250

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

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

Однако, чтобы решить эту проблему, FindBugs позже ввел еще одно решение, основываясь на annotations (см 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.

+79

+1 за комментарий: «Я знаю, что я делаю» – dhiller

+4

Бонус Вопрос: Как мне найти соответствующее значение для заданного сообщили «ошибка» (с помощью гидролокатора)? – PlanBForOpenOffice

+27

Проблема, конечно же, с использованием подхода аннотации заключается в том, что ваш код довольно бесполезно импортирует (и последующую зависимость) библиотеку Findbugs :( –

13

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

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

Если вы используя плагин Eclipse FindBugs, перейдите к файлу фильтра XML, используя Window-> Preferences-> Java-> FindBugs-> Фильтровать файлы-> Исключить файлы фильтров-> Добавить.

-5

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

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

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

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

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

+5

'java.lang.SuppressWarnings' не может работать. У этого есть удержание источника, так что не видно, чтобы найти bugs. –

5

Update Gradle

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

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

файла: /// Users/ваш_пользователь/IdeaProjects/Projectname/сборки/отчеты/FindBugs/главный.HTML

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

find bugs

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

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

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

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

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

+1

Вместо этого вместо синтаксиса 'compile 'net.sourceforge.findbugs: annotations: 1.3.2'', который короче. –

+1

+1, но любезно обновите свой ответ: gradle 'testCompile 'com.google.code.findbugs: annotations: 3.0.0'' и имя аннотации' @ SuppressFBWarnings' –

10

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