<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<FindBugsFilter> <!-- memory -->

  <!-- Too many false positives to be useful.  I could not make it happy :( -->
  <Match>
    <Bug pattern="SF_SWITCH_NO_DEFAULT" />
  </Match>

  <Match>   <!-- Exclude for test classes; too many False Positives. -->
    <Bug pattern="NP_NULL_PARAM_DEREF_NONVIRTUAL" />
    <Class name="~.*\.*Test" />
  </Match>
  
  <Match>   <!-- Exclude for test classes; too many False Positives. -->
    <Bug pattern="DLS_DEAD_LOCAL_STORE" />
    <Class name="~.*\.*Test" />
  </Match>
  
</FindBugsFilter>



<!--  Examples: -->

<!-- Exclude java.* classes -->
  <!--
  <Match>
    <Package name="java\.*" />
  </Match>
-->

  <!-- Exclude test classes -->
<!-- 
  <Match>
    <Class name="~.*\.*Test" />
  </Match>
-->

<!--
     <Match>
       <Class name="com.foobar.ClassNotToBeAnalyzed" />
     </Match>
-->
<!--
     <Match>
       <Class name="com.foobar.ClassWithSomeBugsMatched" />
       <Bug code="DE,UrF,SIC" />
     </Match>
-->
     <!-- Match all XYZ violations. -->
<!--
     <Match>
       <Bug code="XYZ" />
     </Match>
-->
     <!-- Match all doublecheck violations in these methods of "AnotherClass". -->
<!--
     <Match>
       <Class name="com.foobar.AnotherClass" />
       <Or>
         <Method name="nonOverloadedMethod" />
         <Method name="frob" params="int,java.lang.String" returns="void" />
         <Method name="blat" params="" returns="boolean" />
       </Or>
       <Bug code="DC" />
     </Match>
-->
     <!-- A method with a dead local store false positive (medium priority). -->
<!--
     <Match>
       <Class name="com.foobar.MyClass" />
       <Method name="someMethod" />
       <Bug pattern="DLS_DEAD_LOCAL_STORE" />
       <Priority value="2" />
     </Match>
-->
