Недавно я обнаружил аннотацию FindBugs @edu.umd.cs.findbugs.annotations.SuppressWarnings
, которая довольно крутая и позволяет вам в основном сказать FindBugs игнорировать определенные предупреждения.
Я успешно реализовал свою собственную привязку SLF4J, следуя их рекомендациям взять slf4j-simple
и модифицировать его с помощью ваших собственных привязок регистратора и фабрики регистратора, и я рад сообщить, что он работает как очарование.
Я только что провел поиск ошибок в пакете, содержащем эту привязку 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 в одной строке кода?