How to suppress FindBugs warnings for fields or local variables?
Solution 1
@SuppressFBWarnings
on a field only suppresses findbugs warnings reported for that field declaration, not every warning associated with that field.
For example, this suppresses the "Field only ever set to null" warning:
@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;
I think the best you can do is isolate the code with the warning into the smallest method you can, then suppress the warning on the whole method.
Note: @SuppressWarnings
was marked deprecated in favor of @SuppressFBWarnings
Solution 2
Check http://findbugs.sourceforge.net/manual/filter.html#d0e2318 There is a Local tag that can be used with the Method tag. Here you can specify which bug should be excluded for a specific local variable. Example:
<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>
Christian Esken
Updated on August 11, 2021Comments
-
Christian Esken over 2 years
I would like to suppress FindBugs warnings for specific fields or local variables. FindBugs documents that the
Target
can beType
,Field
,Method
,Parameter
,Constructor
,Package
for itsedu.umd.cs.findbugs.annotations.SuppressWarning
annotation [1]. But it does not work for me to annotate the field, only when I annotate the method the warning gets suppressed.Annotating a whole method seems to broad to me. Is there any way to suppress warnings on specific fields? There is another related question [2], but no answer.
[1] http://findbugs.sourceforge.net/manual/annotations.html
[2] Suppress FindBugs warnings in Eclipse
Demo code:
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 } }