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