2009-09-30 24 views
6

Nota: esas anotaciones, estoy hablando, están especificadas por JSR305.Findbugs + JSR305: ¿posibilidad de especificar el comportamiento predeterminado?

tengo la última Findbugs (1.3.9) y que encuentra errores correctamente cuando se asigna un cierto campo, anotado con @Nonnull, en nulo.

Pero, en mi proyecto, la "lógica no nula" es por defecto caso. Diría que null está explícitamente permitido solo en el 5% de los casos.

Por lo tanto, sería muy inconveniente anotar el 95% de los campos con @Nonnull. Prefiero anotar esos 5% de los campos con @Nullable.

Intenté anotar todo un paquete con @Nonnull, no cambia nada.

Entonces, de alguna manera es posible especificar la lógica por defecto?

Respuesta

1

No estoy seguro de si Fiundbug puede lidiar con la siguiente anotación, pero si se desea anotar un paquete todo con "no nulo", es posible que desee utilizar:

@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 { 
} 

Consulte también this article.

Nota: al menos esa anotación está presente en some FindBugs test cases.

+0

Gracias, lo intentó, Findbugs lo ignora (en tipos y en los paquetes). Debe ser un error en Findbugs;) JSR305 está inactivo de todos modos. Tal vez debería buscar otras soluciones. –

0

FindBugs ahora tiene @ReturnValuesAreNonnullByDefault. También tiene @DefaultAnnotation, @DefaultAnnotationForFields, @DefaultAnnotationForMethods y @DefaultAnnotationForParameters.

Pero debería negar que no he utilizado ninguno de los de mis proyectos ..

Cuestiones relacionadas