個々の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の正しくname
にnull
を割り当てるコードの警告を表示します。
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
私はこの問題は@SuppressFBWarnings
が@Nonnull
がある一方で@TypeQualifier
とマークされていないので、@TypeQualifierDefault
と@TypeQualifierNickname
それには適用されないということであると信じています。しかし、ある注釈を別の注釈を使って適用するには、他のメカニズムが必要です。
@クリス:その答えは、使用方法について説明しますfindbugs SuppressWarningアノテーション。この質問は、特定のfindbugs警告を抑制する新しいアノテーションを作成する方法です。 – TimK
@Chrisあなたはすでにここに2番目のリンクを投稿しています:http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen