<?xml version="1.0"?>
<!--
   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.
-->

<!--
  This file contains some false positive bugs detected by findbugs. Their
  false positive nature has been analyzed individually and they have been
  put here to instruct findbugs it must ignore them.
-->
<FindBugsFilter>

  <!-- Reason: Optimization to use == -->
  <Match>
    <Class name="org.apache.commons.lang3.BooleanUtils" />
    <Or>
      <Method name="toBoolean" />
      <Method name="toBooleanObject" />
    </Or>
    <Bug pattern="ES_COMPARING_PARAMETER_STRING_WITH_EQ" />
  </Match>
  <Match>
    <Class name="org.apache.commons.lang3.BooleanUtils" />
    <Method name="toBoolean" />
    <Bug pattern="RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN" />
  </Match>

  <!-- Reason: Behavior documented in javadoc -->
  <Match>
    <Class name="org.apache.commons.lang3.BooleanUtils" />
    <Or>
      <Method name="negate" />
      <Method name="toBooleanObject" />
    </Or>
    <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
  </Match>

  <!-- Reason: base class cannot be changed and field is properly checked against null so behavior is OK -->
  <Match>
    <Class name="org.apache.commons.lang3.text.ExtendedMessageFormat" />
    <Method name="applyPattern" />
    <Bug pattern="UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR" />
  </Match>

  <!-- Reason: Optimization to use == -->
  <Match>
    <Class name="org.apache.commons.lang3.StringUtils" />
    <Or>
      <Method name="indexOfDifference"/>
      <Method name="compare" params="java.lang.String,java.lang.String,boolean"/>
      <Method name="compareIgnoreCase" params="java.lang.String,java.lang.String,boolean"/>
    </Or>
    <Bug pattern="ES_COMPARING_PARAMETER_STRING_WITH_EQ" />
  </Match>

  <!-- Reason: Very much intended to do a fall through on the switch -->
  <Match>
    <Class name="org.apache.commons.lang3.math.NumberUtils" />
    <Method name="createNumber"/>
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>

  <!-- Reason: Very much intended to do a fall through on the switch -->
  <Match>
    <Class name="org.apache.commons.lang3.time.DateUtils" />
    <Method name="getFragment"/>
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>

  <!-- Reason: toProperString is lazily loaded -->
  <Match>
    <Class name="org.apache.commons.lang3.math.Fraction" />
    <Field name="toProperString" />
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED" />
  </Match>

  <!-- Reason: It does call super.clone(), but via a subsequent method -->
  <Match>
    <Class name="org.apache.commons.lang3.text.StrTokenizer" />
    <Method name="clone"/>
    <Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
  </Match>

  <!-- Reason: Testing shows that new Integer(...) etc is quicker than Integer.valueOf -->
  <Match>
    <Bug pattern="DM_NUMBER_CTOR" />
  </Match>

  <!-- Reason: FindBugs 2.0.2 used in maven-findbugs-plugin 2.5.2 seems to have problems with detection of default cases
   in switch statements. All the excluded methods have switch statements that conatin a default case. -->
  <Match>
    <Class name="org.apache.commons.lang3.math.NumberUtils"/>
    <Method name="createNumber" />
    <Bug pattern="SF_SWITCH_NO_DEFAULT" />
  </Match>
  <Match>
    <Class name="org.apache.commons.lang3.text.ExtendedMessageFormat"/>
    <Method name="insertFormats" />
    <Bug pattern="SF_SWITCH_NO_DEFAULT" />
  </Match>
  <!-- Reason: FindBugs does not correctly recognize default branches in switch statements without break statements.
   See, e.g., the report at https://sourceforge.net/p/findbugs/bugs/1298 -->
  <Match>
    <Class name="org.apache.commons.lang3.time.FastDateParser"/>
    <Or>
      <Method name="getStrategy" />
      <Method name="simpleQuote" params="java.lang.StringBuilder, java.lang.String"/>
    </Or>
    <Bug pattern="SF_SWITCH_NO_DEFAULT" />
  </Match>

  <!-- Reason: FindBugs cannot correctly recognize default branches in switch statements without break statements.
   See, e.g., the report at https://sourceforge.net/p/findbugs/bugs/1298 -->
  <Match>
    <Class name="org.apache.commons.lang3.time.FastDatePrinter"/>
    <Method name="appendFullDigits" params="java.lang.Appendable, int, int"/>
    <Bug pattern="SF_SWITCH_NO_DEFAULT" />
  </Match>

  <!-- Reason: The fallthrough on the swich statement is intentional -->
  <Match>
    <Class name="org.apache.commons.lang3.time.FastDatePrinter"/>
    <Method name="appendFullDigits" params="java.lang.Appendable, int, int"/>
    <Bug pattern="SF_SWITCH_FALLTHROUGH" />
  </Match>

  <!-- Reason: Internal class that is used only as a key for an internal FormatCache. For this reason we can
   be sure, that equals will never be called with null or types other than MultipartKey.
  -->
  <Match>
    <Class name="org.apache.commons.lang3.time.FormatCache$MultipartKey" />
    <Method name="equals" />
    <Bug pattern="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS" />
  </Match>
  <Match>
    <Class name="org.apache.commons.lang3.time.FormatCache$MultipartKey" />
    <Method name="equals" />
    <Bug pattern="NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT" />
  </Match>
</FindBugsFilter>
