How to suppress FindBugs warnings for fields or local variables?

45,123

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>
Share:
45,123
Christian Esken
Author by

Christian Esken

Updated on August 11, 2021

Comments

  • Christian Esken
    Christian Esken over 2 years

    I would like to suppress FindBugs warnings for specific fields or local variables. FindBugs documents that the Target can be Type, Field, Method, Parameter, Constructor, Package for its edu.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
        }
    }