2009-09-30 3 views
6

Примечание: эти аннотации, о которых я говорю, указаны JSR305.Findbugs + JSR305: Можно указать поведение по умолчанию?

У меня есть последние FindBugs (1.3.9) и находит ошибки правильно , когда какое-то поле, с аннотацией @Nonnull, присваивается нулевое значение.

Но в моем проекте «ненулевой логикой» является по умолчанию. Я бы сказал, что null явно разрешено только в 5% случаев.

Таким образом, было бы очень неудобно аннотировать 95% полей с помощью @Nonnull. Я предпочел бы аннотировать эти 5% полей с @Nullable.

Я попытался аннотировать весь пакет с помощью @Nonnull, он ничего не меняет.

Таким образом, можно указать логику по умолчанию?

ответ

1

Я не уверен, если Fiundbug может иметь дело со следующей аннотацией, но если вы хотите аннотировать весь пакет с «ненулевым», вы можете использовать:

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

См. Также this article.

Примечание: по крайней мере, эта аннотация содержится в some FindBugs test cases.

+0

Спасибо, попробовал, FindBugs игнорирует его (по типам и на упаковках). Должна быть ошибка в Findbugs;) JSR305 все равно неактивен. Возможно, мне стоит искать другие решения. –

0

У FindBugs теперь есть @ReturnValuesAreNonnullByDefault. Он также имеет @DefaultAnnotation, @DefaultAnnotationForFields, @DefaultAnnotationForMethods и @DefaultAnnotationForParameters.

Но я должен отрицаю, что я не использовал ни одного из тех, кто в моих проектах ..