Недавно я обнаружил аннотацию 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 в одной строке кода?