カスタム注釈を作成して個々の FindBugs 警告を抑制し、コード補完で簡単に使用できるようにしたいと考えています。たとえば、これはすべての@Nonnull
フィールドを設定しないコンストラクターを無視します。
@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"
}
}
問題はwhile is で@SuppressFBWarnings
マークされていないことであり、したがってandはそれに当てはまらないと思います。しかし、別のアノテーションを使用してあるアノテーションを適用するには、別のメカニズムが必要です。@TypeQualifier
@Nonnull
@TypeQualifierDefault
@TypeQualifierNickname