2009-09-30 26 views
6

Uwaga: te adnotacje, o których mówię, są określone przez JSR305.Findbugs + JSR305: Możliwość określenia domyślnego zachowania?

mam najnowsze Findbugs (1.3.9) i stwierdzi błędy poprawnie gdy niektóre pola, opatrzone @Nonnull, jest przypisany do null.

Ale w moim projekcie "logika nie-zerowa" jest przypadkiem domyślnym . Powiedziałbym, że null jest wyraźnie dozwolony tylko w 5% przypadków .

Tak więc byłoby bardzo niewygodne do adnotacji 95% pól z @Nonnull. Wolałbym opisywać te 5% pól za pomocą @Nullable.

Próbowałem napisać adnotację do całej paczki z @Nonnull, nic nie zmienia.

W jaki sposób można określić domyślną logikę?

Odpowiedz

1

Nie jestem pewien, czy Fiundbug radzi sobie z dopiskiem, ale jeśli chcesz adnotacje na cały pakiet z „niepustych”, można użyć:

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

Zobacz także this article.

Uwaga: co najmniej ta adnotacja jest obecna w some FindBugs test cases.

+0

Dziękuję, próbowałem, Findbugs ignoruje go (na rodzaje i na opakowaniach). Musi być błędem w Findbugs;) JSR305 i tak jest nieaktywny. Być może powinienem rozejrzeć się za innymi rozwiązaniami. –

0

FindBugs ma teraz @ReturnValuesAreNonnullByDefault. Ma również @DefaultAnnotation, @DefaultAnnotationForFields, @DefaultAnnotationForMethods i @DefaultAnnotationForParameters.

Ale mam zrzekają że nie użyłem żadnego z nich w moich projektach ..