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

<FindBugsFilter>

  <Match>
    <!--
        DC: Possible double check of field
        DE: Method might ignore exception
        DLS: Dead store to local variable
        Dm: Reliance on default encoding
        DP: Method invoked that should be only be invoked inside a doPrivileged block
        EI: May expose internal representation by returning reference to mutable object
        Eq: Class defines compareTo(...) and uses Object.equals()
        IS: Inconsistent synchronization
        JLM: Synchronization performed on util.concurrent instance
        LI: Incorrect lazy initialization of static field
        Nm: Very confusing method names
        NP: Load of known null value
        PT: Absolute path traversal in servlet
        PZLA: Consider returning a zero length array rather than null
        RCN: Redundant nullcheck of value known to be null
        REC: Exception is caught when Exception is not thrown
        RR: Method ignores results of InputStream.skip()
        RV: Method ignores exceptional return value
        SBSC: Method concatenates strings using + in a loop
        Se: Transient field of class that isn't Serializable
        SIC: Could be refactored into a named static inner class
        UC: Useless non-empty void method
        UPM: Private method is never called
      -->
    <Bug code="DC,DE,DLS,Dm,DP,EI,Eq,IS,JLM,LI,Nm,NP,PT,PZLA,RCN,REC,RR,RV,SBSC,Se,SIC,UC,UPM"/>
  </Match>

  <Match>
    <!-- This Match uses the BUG_PATTERN for matching.

        URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD: allow unread public/protected variables, but not private ones
        UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD: allow unused public/protected variables, but not private ones

      -->
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD,UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"/>
  </Match>

  <Match>
    <Class name="org.apache.commons.crypto.NativeCodeLoader" />
    <Method name="extractLibraryFile" />
    <Bug pattern="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE" />
  </Match>
</FindBugsFilter>

