Как подавить несколько предупреждений 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 в одной строке кода?
Ответы
Ответ 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")