<FindBugsFilter> <!-- sketches-core -->

<!--
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.
-->

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

  <!-- False positive.  FindBugs complains if DQS_RESIZE_THRESHOLD == REBUILD_THRESHOLD, 
       but this allows us to tune these constants for different sketches. -->
  <Match>
    <Bug pattern="DB_DUPLICATE_BRANCHES" />
    <Class name="org.apache.datasketches.theta.DirectQuickSelectSketchR" />
    <Method name="setHashTableThreshold" />
  </Match>

  <!-- False positive.  In this case we want to ignore the exceptions -->
  <Match>
    <Bug pattern="DE_MIGHT_IGNORE" />
    <Class name="org.apache.datasketches.theta.PairwiseCornerCasesTest" />
    <Method name="checkNotOrdered" />
  </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="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
    <Class name="~.*\.*Test" />
  </Match>
  
  <Match>   <!-- Too many False Positives. -->
    <Bug pattern="DLS_DEAD_LOCAL_STORE" />
  </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>
-->
