Niedawno odkryłem adnotację FindBugs "@edu.umd.cs.findbugs.annotations.SuppressWarnings
, która jest całkiem fajna i pozwala w zasadzie powiedzieć FindBugs, aby ignorował pewne ostrzeżenia.Jak tłumić wiele ostrzeżeń FindBugs dla tego samego wiersza kodu?
Z powodzeniem wdrożyłem własne powiązanie SLF4J, postępując zgodnie z ich zaleceniami, aby pobrać slf4j-simple
i zmodyfikować je za pomocą własnych powiązań fabrycznych rejestratora i rejestratora, a ja z przyjemnością stwierdzam, że działa jak czar.
Właśnie prowadził znaleźć błędy na opakowaniu, które zawiera wiążący to SLF4J i narzeka pewnej linii kodu napisanego przez pierwotnego StaticLoggerBinder
autora (Ceki Gulku):
// to avoid constant folding by the compiler, this field must *not* be final.
publicstatic String REQUESTED_API_VERSION = "1.6"; // !final
FindBugs skarży się, że tej dziedzinie "nie jest ostateczny, ale powinien być". Jednak (bardzo) inteligentni ludzie na SLF4J już o tym pomyśleli i umieścili otaczające komentarze przedstawione powyżej.
Więc, tak aby uzyskać FindBugs się zamknąć, mam zmodyfikowany kod na moim zwykłym sposobem tłumienia ostrzeżenia FB:
@edu.umd.cs.findbugs.annotations.SuppressWarnings("MS_SHOULD_BE_FINAL")
public static String REQUESTED_API_VERSION = "1.6";
Kiedy oczyścić mój projekt i ponownie uruchomić FindBugs, otrzymuję sekund ostrzeżenie na tej samej linii kodu, tym razem z sędzią:
to pole nie jest czytana. Pole jest publiczne lub chronione, więc być może ma być używane z klasami, które nie są częścią analizy. Jeśli nie, rozważ usunięcie go z klasy.
Kiedy dodać ten drugi tłumienie ostrzegawczy:
@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";
pojawia się błąd kompilatora/składni z Eclipse:
zduplikowane @SuppressWarnings adnotacji.
Jak mogę ukryć wiele ostrzeżeń FindBugs na tym samym wierszu kodu?
Sugestia: Wykorzystanie 'SuppressFBWarnings' więc można importować go tak samo jak każda inna klasa zamiast używać pełnej nazwy . –