2009-09-30 12 views
6

Nota: queste annotazioni, sto parlando, sono specificati dal JSR305.Findbugs + JSR305: possibilità di specificare un comportamento predefinito?

Ho l'ultima Findbugs (1.3.9) e trova errori correttamente quando qualche campo, annotato con @Nonnull, viene assegnato a null.

Ma, nel mio progetto, la "logica non nulla" è il predefinito caso. Direi che nulla è esplicitamente consentito solo nel 5% dei casi.

Quindi, sarebbe molto scomodo annotare il 95% dei campi con @Null. Preferirei piuttosto annotare quelli con lo 5% di campi con @Nullable.

ho cercato di annotare un intero pacchetto con @Nonnull, non cambia nulla.

Quindi, è in qualche modo possibile specificare la logica predefinita?

risposta

1

Io non sono sicuro se Fiundbug può trattare con la seguente annotazione, ma se si desidera annotare un pacchetto tutto con "nulli", si consiglia di utilizzare:

@ParametersAreNonnullByDefault

/** 
* This annotation can be applied to a package, class or method to indicate that 
* the method parameters in that element are nonnull by default unless there is: 
* <ul> 
* <li>An explicit nullness annotation 
* <li>The method overrides a method in a superclass (in which case the 
* annotation of the corresponding parameter in the superclass applies) 
* <li> there is a default parameter annotation applied to a more tightly nested 
* element. 
* </ul> 
* 
*/ 
@Documented 
@Nonnull 
@TypeQualifierDefault(ElementType.PARAMETER) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ParametersAreNonnullByDefault { 
} 

Vedi anche this article.

Nota: almeno questo annotazione è presente in some FindBugs test cases.

+0

Grazie, provato, Findbugs ignora (su tipi e sui pacchetti). Deve essere un bug in Findbugs;) JSR305 è comunque inattivo. Forse dovrei cercare altre soluzioni. –

0

FindBugs ha ora @ReturnValuesAreNonnullByDefault. Ha anche @DefaultAnnotation, @DefaultAnnotationForFields, @DefaultAnnotationForMethods e @DefaultAnnotationForParameters.

Ma dovrei disconoscere che non ho utilizzato uno di quelli nei miei progetti ..