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

  <!-- Unchecked cast is deliberate -->
  <Match>
    <Class name="org.apache.commons.net.ftp.FTPSServerSocketFactory" />
    <Method name="init" />
    <Bug code="BC" />
  </Match>

  <!-- Unchecked cast is deliberate -->
  <Match>
    <Class name="org.apache.commons.net.ftp.FTPSSocketFactory" />
    <Method name="init" />
    <Bug code="BC" />
  </Match>

  <!-- Don't bother with EI - expose internal representation -->
  <Match>
    <Bug code="EI,EI2" />
  </Match>

  <!-- future FTPClientConfig instances may not implement configurable -->
  <Match>
    <Class name="org.apache.commons.net.ftp.parser.ConfigurableFTPFileEntryParserImpl" />
    <Method name="configure" />
    <Bug code="BC" />
  </Match>

  <!-- False positive - missing default -->
  <Match>
    <Class name="org.apache.commons.net.io.DotTerminatedMessageWriter" />
    <Method name="write" />
    <Bug code="SF" />
  </Match>

  <!-- False positive - missing default -->
  <Match>
    <Class name="org.apache.commons.net.io.ToNetASCIIOutputStream" />
    <Method name="write" />
    <Bug code="SF" />
  </Match>

  <!-- Deprecated code -->
  <Match>
    <Class name="org.apache.commons.net.nntp.ArticlePointer" />
    <Bug code="UrF" />
  </Match>

  <!-- Used externally -->
  <Match>
    <Class name="org.apache.commons.net.pop3.POP3MessageInfo" />
    <Or>
      <Field name="size"/>
      <Field name="identifier"/>
    </Or>
    <Bug code="UrF" />
  </Match>


  <!-- Don't check examples -->
  <Match>
    <Package name="~examples\..*" />
  </Match>

</FindBugsFilter>
