=============
How it works:
=============

A filter file is an XML file with a top-level "FindBugsFilter" element
which has some number of "Match" elements as children.  Each Match
element represents a predicate which is applied to generated bug instances.
Usually, a filter will be used to exclude bug instances.  For example:

  findbugs -textui -exclude myExcludeFilter.xml myApp.jar

However, a filter could also be used to select bug instances to specifically
report:

  findbugs -textui -include myIncludeFilter.xml myApp.jar

Match has "class" and "classregex" attributes specifying what class or classes
the predicate applies to.

Match contains children, which are conjuncts of the predicate.
(I.e., each of the children must be true for the predicate to be true.)

=======================
Types of Match clauses:
=======================

   <BugCode> specifies abbreviations of bugs.
   The "name" attribute is a comma-seperated list of abbreviations.

   <Method> specifies a method.  The "name" attribute is the name
   of the method.  The "params" attribute is a comma separated list
   of the types of the method's parameters.  The "returns" attribute is
   the method's return type.  In "params" and "returns", class names
   must be fully qualified.  (E.g., "java.lang.String" instead of just
   "String".)  Note that "params" and "returns" are optional; you can
   just specify "name", and the clause will match all methods with
   that name.  However, if you specify either "params" or "returns",
   you must specify both of them.

   <Or> combines Match clauses as disjuncts.  I.e., you can put two
   "Method" elements in an Or clause in order match either method.

========
Caveats:
========

Match clauses can only match information that is actually contained in the
bug instances.  Every bug instance has a class, so in general, excluding
bugs by class will work.

Some bug instances have two classes.  For example, the DE (dropped exception)
bugs report both the class containing the method where the dropped exception
happens, and the class which represents the type of the dropped exception.
Only the FIRST (primary) class is matched against Match clauses.
So, for example, if you want to suppress IC (initialization circularity)
reports for classes "com.foobar.A" and "com.foobar.B", you would use
two Match clauses:

   <Match class="com.foobar.A">
      <BugCode name="IC" />
   </Match>

   <Match class="com.foobar.B">
      <BugCode name="IC" />
   </Match>

Many kinds of bugs report what method they occur in.  For those bug instances,
you can put Method clauses in the Match element and they should work
as expected.

=========
Examples:
=========

  1. Match all bug reports for a class.

     <Match class="com.foobar.MyClass" />

  2. Match certain tests from a class.
     <Match class="com.foobar.MyClass">
       <BugCode name="DE,UrF,SIC" />
     </Match>

  3. Match certain tests from all classes.

     <Match classregex=".*" >
       <BugCode name="DE,UrF,SIC" />
     </Match>

  4. Match bug types from specified methods of a class.

     <Match class="com.foobar.MyClass">
       <Or>
         <Method name="frob" params="int,java.lang.String" returns="void" />
         <Method name="blat" params="" returns="boolean" />
       </Or>
       <BugCode name="DC" />
     </Match>

=================
Complete Example:
=================

<FindBugsFilter>
     <Match class="com.foobar.ClassNotToBeAnalyzed" />

     <Match class="com.foobar.ClassWithSomeBugsMatched">
       <BugCode name="DE,UrF,SIC" />
     </Match>

     <!-- Match all XYZ violations. -->
     <Match classregex=".*" >
       <BugCode name="XYZ" />
     </Match>

     <!-- Match all doublecheck violations in these methods of "AnotherClass". -->
     <Match class="com.foobar.AnotherClass">
       <Or>
         <Method name="nonOverloadedMethod" />
         <Method name="frob" params="int,java.lang.String" returns="void" />
         <Method name="blat" params="" returns="boolean" />
       </Or>
       <BugCode name="DC" />
     </Match>
</FindBugsFilter>
