Findbugs + JSR305:指定默认行为的可能性?

时间:2009-09-30 10:06:05

标签: java static-analysis findbugs jsr305

注意:我正在谈论的那些注释是由JSR305指定的。

我有最新的Findbugs(1.3.9),它发现错误正确 当一些用@Nonnull注释的字段被赋值为null时。

但是,在我的项目中,“非空逻辑”是默认情况。我会这样说 null仅在5%的情况下明确允许

所以,这将非常不方便 使用@Nonnull注释95%的字段。我宁愿更喜欢注释那些 5%的字段包含@Nullable。

我尝试使用@Nonnull注释整个包,它不会改变任何内容。

那么,以某种方式可以指定默认逻辑?

2 个答案:

答案 0 :(得分:1)

我不确定Fiundbug是否可以处理以下注释,但如果您想使用“NonNull”注释所有包,则可能需要使用:

@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中至少存在该注释。

答案 1 :(得分:0)

FindBugs现在有@ReturnValuesAreNonnullByDefault。它还有@DefaultAnnotation,@ DefaultAnnotationForFields,@ DefaultAnnotationForMethods和@DefaultAnnotationForParameters。

但我不应该否认我在项目中没有使用任何这些......