<!--
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> <!-- sketches-core -->

  <!-- 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.SetOpsCornerCasesTest" />
    <Method name="checkSeedHash" />
  </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="NP_LOAD_OF_KNOWN_NULL_VALUE" />
    <Class name="~.*\.*Test" />
  </Match>
  
  <Match>
    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
    <Class name="~.*\.Group" />
  </Match>
  
  <Match>
    <Bug pattern="VO_VOLATILE_INCREMENT" />
    <Class name="~.*\.Concurrent.+QuickSelectSketch" />
  </Match>
  
  <Match> 
    <Class name="~.*\.TestAllTest" />
  </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>

  <Match>   <!-- Harmless in the Builder -->
    <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
    <Class name="org.apache.datasketches.theta.UpdateSketchBuilder" />
  </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>
-->
