Desidero creare annotazioni personalizzate per sopprimere i singoli avvisi di FindBugs per semplificare l'utilizzo tramite il completamento del codice. Ad esempio, questo ignora i costruttori che non impostano tutti i campi @Nonnull
.Annotazione personalizzata per sopprimere un avviso specifico FindBugs
@TypeQualifierDefault(ElementType.CONSTRUCTOR)
@SuppressFBWarnings("NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
@Retention(RetentionPolicy.CLASS)
public @interface SuppressNonnullFieldNotInitializedWarning
{ }
Tuttavia, continuo a vedere l'avviso quando si utilizza l'annotazione.
public class User {
@Nonnull
private String name;
@SuppressNonnullFieldNotInitializedWarning
public User() {
// "Nonnull field name is not initialized by new User()"
}
}
Ho provato diversi criteri di conservazione e tipi di elementi, mettendo l'annotazione sul costruttore e la classe, e anche @TypeQualifierNickname
.
Questo stesso schema funziona per applicare @Nonnull
a tutti i campi di una classe.
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{ }
FindBugs visualizza correttamente un avvertimento per il codice che assegna null
a name
.
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
Credo che il problema è che @SuppressFBWarnings
non è contrassegnato con @TypeQualifier
mentre @Nonnull
è, e quindi @TypeQualifierDefault
e @TypeQualifierNickname
non si applicano ad esso. Ma ci deve essere un altro meccanismo per applicare un'annotazione usando un altro.
@ Chris: La risposta descrive come utilizzare il findbugs SuppressWarning annotation. Questa domanda è come creare una nuova annotazione che sopprime un avviso specifico sui findbug. – TimK
@Chris Hai già postato il secondo link qui: http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen