Tôi muốn tạo chú thích tùy chỉnh để ngăn chặn cảnh báo FindBugs riêng lẻ để làm cho việc sử dụng chúng dễ dàng hơn thông qua hoàn thành mã. Ví dụ, điều này bỏ qua các nhà xây dựng không đặt tất cả các trường @Nonnull
.Chú thích tùy chỉnh để chặn cảnh báo FindBugs cụ thể
@TypeQualifierDefault(ElementType.CONSTRUCTOR)
@SuppressFBWarnings("NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
@Retention(RetentionPolicy.CLASS)
public @interface SuppressNonnullFieldNotInitializedWarning
{ }
Tuy nhiên, tôi vẫn thấy cảnh báo khi sử dụng chú thích.
public class User {
@Nonnull
private String name;
@SuppressNonnullFieldNotInitializedWarning
public User() {
// "Nonnull field name is not initialized by new User()"
}
}
Tôi đã thử các chính sách lưu giữ và loại phần tử khác nhau, đặt chú thích trên hàm tạo và lớp, và thậm chí @TypeQualifierNickname
.
Mẫu tương tự này hoạt động để áp dụng @Nonnull
cho tất cả các trường trong một lớp học.
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{ }
FindBugs hiển thị một cách chính xác một cảnh báo cho mã mà gán null
để name
.
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
Tôi tin rằng vấn đề là @SuppressFBWarnings
không được đánh dấu với @TypeQualifier
khi @Nonnull
là, và do đó @TypeQualifierDefault
và @TypeQualifierNickname
không áp dụng đối với nó. Nhưng phải có một số cơ chế khác để áp dụng một chú thích bằng cách sử dụng một chú thích khác.
@ Chris: Câu trả lời đó mô tả cách sử dụng findbugs SuppressCảnh báo chú thích. Câu hỏi này là làm thế nào để tạo ra một chú thích mới mà ngăn chặn một cảnh báo tìm kiếm cụ thể. – TimK
@Chris Bạn đã đăng liên kết thứ hai đã có tại đây: http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen