2012-06-05 21 views
12

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?

+0

Sugestia: Wykorzystanie 'SuppressFBWarnings' więc można importować go tak samo jak każda inna klasa zamiast używać pełnej nazwy . –

Odpowiedz

17

Wystarczy wymienić wszystkie identyfikatory ostrzegawcze na tablicy, w ramach jednej adnotacji:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({ 
     "MS_SHOULD_BE_FINAL", 
     "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"}) 
public static String REQUESTED_API_VERSION = "1.6"; 

Podobnie jak w przypadku standardowego java.lang.SuppressWarnings wersja również has a parameter of type String[] FindBugs. Dla pojedynczej wartości nawiasy klamrowe można pominąć, aby ułatwić życie.

1

Spróbuj tego:

@edu.umd.cs.findbugs.annotations.SuppressWarnings({"MS_SHOULD_BE_FINAL" , "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"}) 
public static String REQUESTED_API_VERSION = "1.6"; 
1

FindBugs 3+ styl:

@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") 
Powiązane problemy