我想要创建自定义注释来抑制各个FindBugs警告,以便通过代码完成来更容易地使用它们。例如,这个忽略不设置所有@Nonnull
字段的构造函数。自定义注释来抑制特定的FindBugs警告
@TypeQualifierDefault(ElementType.CONSTRUCTOR)
@SuppressFBWarnings("NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
@Retention(RetentionPolicy.CLASS)
public @interface SuppressNonnullFieldNotInitializedWarning
{ }
但是,我仍然看到使用注释时的警告。
public class User {
@Nonnull
private String name;
@SuppressNonnullFieldNotInitializedWarning
public User() {
// "Nonnull field name is not initialized by new User()"
}
}
我已经尝试了不同的保留策略和元素类型,将注释的构造函数和类,甚至@TypeQualifierNickname
。
这种模式适用于将@Nonnull
应用于类中的所有字段。
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{ }
FindBugs的正确显示该分配null
到name
代码警告。
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
我相信问题是@SuppressFBWarnings
没有打上@TypeQualifier
而@Nonnull
是,这样@TypeQualifierDefault
和@TypeQualifierNickname
并不适用于它。但是必须有一些其他机制来使用另一个注释来应用一个注释。
@克里斯:这个答案描述了如何使用findbugs SuppressWarning注释。这个问题是如何创建一个新的注释来抑制特定的findbugs警告。 – TimK
@Chris您已在此处发布第二个链接:http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen