2013-01-11 63 views
8

個々の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の正しくnamenullを割り当てるコードの警告を表示します。

@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それには適用されないということであると信じています。しかし、ある注釈を別の注釈を使って適用するには、他のメカニズムが必要です。

+1

@クリス:その答えは、使用方法について説明しますfindbugs SuppressWarningアノテーション。この質問は、特定のfindbugs警告を抑制する新しいアノテーションを作成する方法です。 – TimK

+0

@Chrisあなたはすでにここに2番目のリンクを投稿しています:http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen

答えて

1

(具体的な回答はありませんが)@SuppressFBWarningsでコード補完を改善したい場合は、それぞれの警告コードにstatic final Stringを定義してアノテーションに使用することができます。例えば

その後
public final class FBWarningCodes { 
    private FBWarningCodes() { } 

    public static final String NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR = "NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR"; 
} 

import static com.tmobile.tmo.cms.service.content.FBWarningCodes.*; 

@SuppressFBWarnings(NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR) 

(確かにEclipseがアノテーションでvalue=を指定しない限り、コード補完を行うにはしたくありませんが)

+0

これは私の現在の解決策ですが、定数名 –

+3

Eclipseユーザー用のテンプレートは次のとおりです。fb - '@ $ {suppress:newType(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)}($ {warning:newType(com.tmobile.tmo.cms.service.content。 FBWarningCodes)}。$ {cursor}) 'fb'と打ち込み、Ctrl + Spaceを2回押して、抑制する警告を選択します。 –

関連する問題