29

特定のフィールドまたはローカル変数に対するFindBugsの警告を抑制したいと思います。FindBugsは、注釈として、、、、、、を使用できることを文書化しています[ Target1 Type] 。ただし、フィールドに注釈を付けることはできません。メソッドに注釈を付ける場合にのみ、警告が抑制されます。FieldMethodParameterConstructorPackageedu.umd.cs.findbugs.annotations.SuppressWarning

メソッド全体に注釈を付けることは、私には広いように思えます。特定のフィールドの警告を抑制する方法はありますか?別の関連する質問[2]がありますが、答えはありません。

[1] http://findbugs.sourceforge.net/manual/annotations.html

[2] EclipseでFindBugsの警告を抑制します

デモコード:

public class SyncOnBoxed
{
    static int counter = 0;
    // The following SuppressWarnings does NOT prevent the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    final static Long expiringLock = new Long(System.currentTimeMillis() + 10);
    
    public static void main(String[] args) {
        while (increment(expiringLock)) {
            System.out.println(counter);
        }
    }
    
    // The following SuppressWarnings prevents the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    protected static boolean increment(Long expiringLock)
    {
        synchronized (expiringLock) { // <<< FindBugs warning is here: Synchronization on Long in SyncOnBoxed.increment()
            counter++;
        }
        return expiringLock > System.currentTimeMillis(); // return false when lock is expired
    }
}
4

2 に答える 2

32

@SuppressFBWarningsフィールド上では、そのフィールドに関連付けられているすべての警告ではなく、そのフィールド宣言に対して報告されたfindbugs警告のみが抑制されます。

たとえば、これにより、「フィールドはこれまでnullに設定されただけです」という警告が抑制されます。

@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;

私ができる最善のことは、警告のあるコードを可能な限り最小のメソッドに分離し、メソッド全体で警告を抑制することだと思います。

注:非推奨@SuppressWarningsとしてマークされ、@SuppressFBWarnings

于 2013-01-24T20:01:14.467 に答える
3

http://findbugs.sourceforge.net/manual/filter.html#d0e2318を確認してください。Method タグで使用できるLocalタグがあります。ここでは、特定のローカル変数から除外するバグを指定できます。例:

<FindBugsFilter>
  <Match>
        <Class name="<fully-qualified-class-name>" />
        <Method name="<method-name>" />
        <Local name="<local-variable-name-in-above-method>" />
        <Bug pattern="DLS_DEAD_LOCAL_STORE" />
  </Match>
</FindBugsFilter>
于 2015-05-29T14:01:47.367 に答える