español bugs java findbugs jsr305

java - español - findbugs netbeans



¿Cómo indicar que los campos miembros son @Nonnull por defecto? (1)

Tuve una pregunta similar y encontré que lo siguiente parece funcionar con findbugs (2.0.1-rc2)

Cree un archivo java con la siguiente definición de anotación

@Nonnull @TypeQualifierDefault(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface FieldsAreNonNullByDefault { }

de manera similar, para hacer cumplir que todos los valores de retorno de un método no son nulos

@Nonnull @TypeQualifierDefault(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ReturnTypesAreNonNullByDefault { }

y luego anote el paquete como de costumbre.

Utilicé lo siguiente para mis pruebas (package-info.java)

@javax.annotation.ParametersAreNonnullByDefault @com.habit.lib.lang.FieldsAreNonNullByDefault @com.habit.lib.lang.ReturnTypesAreNonNullByDefault package com.mypackagename.subpkg;

Mi pregunta es un seguimiento de este .

En versiones anteriores de FindBugs, era posible usar @DefaultAnnotation(Nonnull.class) o @DefaultAnnotationForFields(Nonnull.class) para indicar que todos los campos de un paquete deben tratarse como @Nonnull . En la versión actual de FindBugs (2.0), @DefaultAnnotation y @DefaultAnnotationForFields están en desuso, y todos deberíamos usar JSR-305 en su lugar. Pero JSR-305 no parece cubrir todo lo que cubren las anotaciones de FindBugs (ahora en desuso).

El javadoc sugiere una serie de alternativas:

  • @ParametersAreNonnullByDefault . Esto (obviamente) solo se aplica a los parámetros, no a los campos miembros.
  • @CheckReturnValue , cuando se aplica a un tipo o paquete. De nuevo, esto no se aplica a los campos de miembros.
  • @TypeQualifierDefault . Tal vez esto pueda hacer lo que quiera, pero no entiendo cómo funciona, y no puedo encontrar ninguna documentación o ejemplo sobre su uso o intención, además de algunos javadoc crípticos. Creo que me ayudará a crear mis propias anotaciones, pero ¿puedo estar seguro de que todas las herramientas (FindBugs, Eclipse, etc.) interpretarán esta nueva anotación correctamente (o incluso en absoluto)?

El javadoc no proporciona ninguna pista sobre cómo lidiar con su desaprobación.

Entonces, al usar las versiones actuales de FindBugs y / o JSR-305, ¿cómo debo indicar que todos los campos de miembros en un paquete determinado (o incluso en una clase determinada) deben tratarse como @Nonnull ? ¿Es incluso posible?