特定のフィールドまたはローカル変数のFindBugs警告を抑制したいと思います。 FindBugsは、ターゲットがedu.umd.cs.findbugs.annotations.SuppressWarningアノテーションのタイプ、フィールド、メソッド、パラメーター、コンストラクター、パッケージになり得ることを文書化します[1]。しかし、フィールドに注釈を付けても機能しません。メソッドに注釈を付けた場合にのみ、警告が抑制されます。
メソッド全体に注釈を付けることは、私には広範に思えます。特定のフィールドで警告を抑制する方法はありますか?別の関連する質問[2]がありますが、答えはありません。
[1] http://findbugs.sourceforge.net/manual/annotations.html
デモコード:
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
}
}
@SuppressFBWarnings
は、そのフィールドに関連付けられたすべての警告ではなく、そのフィールド宣言について報告されたfindbugs警告のみを抑制します。
たとえば、これは「フィールドのみがnullに設定される」という警告を抑制します。
@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;
あなたができる最善のことは、警告のあるコードを可能な限り小さなメソッドに分離し、メソッド全体で警告を抑制することだと思います。
注意: @SuppressWarnings
がマークされました deprecated 賛成@SuppressFBWarnings
チェック 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>