Подтвердить что ты не робот

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

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

Я успешно выполнил свою собственную привязку SLF4J, выполнив их рекомендации по принятию slf4j-simple и изменив ее с помощью собственных привязок регистратора и регистратора 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 в одной строке кода?

4b9b3361

Ответ 1

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

@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[]. Для одного значения фигурные скобки могут быть опущены, хотя облегчить жизнь.

Ответ 2

Попробуйте следующее:

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

Ответ 3

Стиль 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")