2009-12-02 12 views

risposta

250

L'approccio iniziale di FindBug prevede i file di configurazione XML, ovvero filters. Questo è molto meno conveniente della soluzione PMD, ma FindBug funziona su bytecode, non sul codice sorgente, quindi i commenti non sono ovviamente un'opzione. Esempio:

<Match> 
    <Class name="com.mycompany.Foo" /> 
    <Method name="bar" /> 
    <Bug pattern="DLS_DEAD_STORE_OF_CLASS_LITERAL" /> 
</Match> 

Tuttavia, per risolvere questo problema, FindBugs successivamente introdotto un'altra soluzione basata su annotations (vedi SuppressFBWarnings) che è possibile utilizzare in classe o al livello di metodo (più conveniente che XML a mio parere). Esempio (forse non il migliore, ma, beh, è ​​solo un esempio):

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value="HE_EQUALS_USE_HASHCODE", 
    justification="I know what I'm doing") 

Nota che, dal momento FindBugs 3.0.0 SuppressWarnings è stato deprecato in favore di @SuppressFBWarnings a causa del nome scontro con Java SuppressWarnings.

+79

+1 per il tuo commento "So quello che sto facendo" – dhiller

+4

Bonus Domanda: Come faccio a trovare il valore appropriato per un dato riferito "bug" (usando il sonar)? – PlanBForOpenOffice

+27

Il problema, ovviamente, con l'utilizzo dell'approccio di annotazione è che il codice importa piuttosto inutilmente (e la dipendenza successiva) la libreria di Findbugs :( –

13

Ecco un esempio più completo di un filtro XML (nell'esempio sopra di per sé non funzionerà dal momento che mostra solo un frammento e manca il <FindBugsFilter> etichette inizio e fine):

<FindBugsFilter> 
    <Match> 
     <Class name="com.mycompany.foo" /> 
     <Method name="bar" /> 
     <Bug pattern="NP_BOOLEAN_RETURN_NULL" /> 
    </Match> 
</FindBugsFilter> 

Se sei utilizzando il plug-in Eclipse FindBugs, sfoglia il file del filtro XML utilizzando Window-> Preferences-> Java-> FindBugs-> Filter files-> Exclude filter files-> Aggiungi.

-5

ho intenzione di lasciare questo uno qui: https://stackoverflow.com/a/14509697/1356953

Si prega di notare che questo funziona con java.lang.SuppressWarnings quindi nessun bisogno di usare un'annotazione separata.

@SuppressWarnings su un campo sopprime solo findbugs avvertenze segnalati per tale dichiarazione campo, non ogni allarme associato a quel campo.

Ad esempio, questa sopprime il "campo sempre e solo impostato su null" avvertimento:

@SuppressWarnings ("UWF_NULL_FIELD") String s = null; Penso che il miglior che puoi fare sia isolare il codice con l'avviso nel più piccolo metodo che puoi, quindi sopprimere l'avviso sull'intero metodo.

+5

'java.lang.SuppressWarnings' non può funzionare. Ha una conservazione del codice sorgente, quindi non è visibile a findbugs. –

5

Aggiornamento Gradle

dependencies { 
    compile group: 'findbugs', name: 'findbugs', version: '1.0.0' 
} 

Individuare il Rapporto FindBugs

file: /// Users/vostro_utente/IdeaProjects/Nome progetto/build/relazioni/findbugs/principale.html

Trova il messaggio specifico

find bugs

Importa la versione corretta dell'annotazione

import edu.umd.cs.findbugs.annotations.SuppressWarnings; 

Aggiungere l'annotazione direttamente sopra il codice incriminato

@SuppressWarnings("OUT_OF_RANGE_ARRAY_INDEX") 

Vedi qui per ulteriori informazioni: findbugs Spring Annotation

+1

Puoi usare 'compile 'net.sourceforge.findbugs: annotazioni: la sintassi 1.3.2' invece che è più corta. –

+1

+1, ma aggiorna gentilmente la tua risposta con: gradle 'testCompile 'com.google.code.findbugs: annotazioni: 3.0.0'' e nome annotazione' @ SuppressFBWarnings' –

10

Come altri hanno detto, è possibile utilizzare il @SuppressFBWarnings annotazione. Se non vuoi o non puoi aggiungere un'altra dipendenza al tuo codice, puoi aggiungere tu stesso l'annotazione al tuo codice, Findbugs non si cura di quale pacchetto sia l'annotazione.

@Retention(RetentionPolicy.CLASS) 
public @interface SuppressFBWarnings { 
    /** 
    * The set of FindBugs warnings that are to be suppressed in 
    * annotated element. The value can be a bug category, kind or pattern. 
    * 
    */ 
    String[] value() default {}; 

    /** 
    * Optional documentation of the reason why the warning is suppressed 
    */ 
    String justification() default ""; 
} 

Fonte: https://sourceforge.net/p/findbugs/feature-requests/298/#5e88

Problemi correlati