Как подавить несколько предупреждений FindBugs для одной строки кода

недавно я обнаружил FindBugs'@edu.umd.cs.findbugs.annotations.SuppressWarnings аннотация, которая довольно крутая и позволяет вам в основном говорить FindBugs игнорировать определенные предупреждения.

я успешно реализовал свою собственную привязку SLF4J, следуя их рекомендациям, чтобы взять slf4j-simple и измените его с помощью собственных Привязок logger и logger factory, и я рад сказать, что он работает как шарм.

Я просто побежал найти ошибки в пакете, который содержит эту привязку SLF4J, и он жалуется на определенная строка кода, написанная оригиналом StaticLoggerBinder автор (Ceki Gulku):

// to avoid constant folding by the compiler, this field must *not* be final.
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final

FindBugs жалуется, что это поле"не окончательно, но должно быть". Однако (очень) умные люди в SLF4J уже подумали об этом и разместили окружающие комментарии, приведенные выше.

Итак, чтобы заставить FindBugs заткнуться, я изменил код в соответствии с моим обычным способом подавления предупреждений FB:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
public static String REQUESTED_API_VERSION = "1.6";

когда я очищаю свой проект и повторно запускаю FindBugs, я получаю второй предупреждение в той же строке кода, на этот раз жалуясь:

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

когда я добавляю это второе подавление предупреждения:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
@edu.umd.cs.findbugs.annotations.SuppressWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public static String REQUESTED_API_VERSION = "1.6";

Я получаю ошибку компилятора / синтаксиса от Eclipse:

дублировать аннотацию @SuppressWarnings.

как я могу подавить несколько предупреждений FindBugs в одной строке кода?

3 ответов


просто перечислите все идентификаторы предупреждений в массиве, в пределах одной аннотации:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({
        "MS_SHOULD_BE_FINAL", 
        "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";

так же, как для стандартного java.lang.SuppressWarnings, версия FindBugs также имеет параметр типа String[]. Для одного значения фигурные скобки можно опустить, чтобы облегчить жизнь.


FindBugs 3+ стиль:

  @SuppressFBWarnings(
    value={"NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE","STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"},
    justification="let me just make the build pass")

попробуйте это:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({"MS_SHOULD_BE_FINAL" , "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
public static String REQUESTED_API_VERSION = "1.6";