<?xml version="1.0" encoding="UTF-8"?>
<!--
    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>
  <!-- Ignored bug categories. Bugs in these categories should not block the build. -->
  <Bug category="I18N"/>
  <Bug pattern="DM_STRING_CTOR"/>
  <Bug pattern="EI_EXPOSE_REP" />
  <Bug pattern="EI_EXPOSE_REP2" />
  <Bug pattern="SE_NO_SERIALVERSIONID"/>

  <!-- The uncallable method error fails on @ProcessElement style methods -->
  <Bug pattern="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS"/>

  <!-- Suppress checking of AutoValue internals -->
  <Match>
    <Class name="~.*AutoValue_.*"/>
  </Match>

  <!--
          Suppressed findbugs issues. All new issues should include a comment why they're
          suppressed.

          Suppressions should go in this file rather than inline using @SuppressFBWarnings to avoid
          unapproved artifact license.
	-->
  <Match>
    <Class name="org.apache.beam.sdk.coders.AvroCoder$SerializableSchemaSupplier"/>
    <Field name="schema"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--
    writeReplace makes this object serializable. This is a limitation of FindBugs as discussed here:
    http://stackoverflow.com/questions/26156523/is-writeobject-not-neccesary-using-the-serialization-proxy-pattern
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.coders.SerializableCoder"/>
    <Field name="typeDescriptor"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
    <!--
    the field is used only in getEncodedTypeDescriptor, where it is restored if it is not present due to
    serialization
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.io.jms.JmsRecord"/>
    <Field name="jmsDestination"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--
    JMS destination is serializable according to the JMS spec even if it doesn't implement
    Serializable.
     -->
  </Match>
  <Match>
    <Class name="org.apache.beam.sdk.io.jms.JmsRecord"/>
    <Field name="jmsReplyTo"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--
    JMS ReplyTo destination is serializable according to the JMS spec even if it doesn't implement
    Serializable.
     -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.coders.InstantCoder$LexicographicLongConverter"/>
    <Bug pattern="HE_INHERITS_EQUALS_USE_HASHCODE"/>
    <!-- Converter overrides .equals() to add documentation but does not change behavior -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.testing.PAssert$PCollectionViewAssert"/>
    <Method name="equals" />
    <Bug pattern="EQ_UNUSUAL"/>
    <!-- Unsupported operation -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.testing.PAssert$PCollectionContentsAssert"/>
    <Method name="equals" />
    <Bug pattern="EQ_UNUSUAL"/>
    <!-- Unsupported operation -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.testing.SerializableMatchers$SerializableArrayViaCoder"/>
    <Field name="value" />
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
    <!-- Cached value is lazily restored on read. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.transforms.Mean$CountSum"/>
    <Method name="equals" />
    <Bug pattern="FE_FLOATING_POINT_EQUALITY"/>
    <!-- Comparing doubles directly since equals method is only used in coder test. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ExposedByteArrayInputStream"/>
    <Method name="readAll" />
    <Bug pattern="EI_EXPOSE_REP"/>
    <!-- Returns internal buffer by design. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ExposedByteArrayOutputStream"/>
    <Method name="toByteArray" />
    <Bug pattern="EI_EXPOSE_REP"/>
    <!-- Returns internal buffer by design. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ExposedByteArrayOutputStream"/>
    <Method name="toByteArray" />
    <Bug pattern="EI_EXPOSE_REP"/>
    <!-- Returns internal buffer by design. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ExposedByteArrayOutputStream"/>
    <Method name="writeAndOwn" />
    <Bug pattern="EI_EXPOSE_REP"/>
    <!-- Takes ownership of input buffer -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.dataflow.util.MonitoringUtilTest" />
    <Field name="thrown" />
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
    <!-- TestRule used automatically by JUnit framework -->
  </Match>
  <Match>
    <Class name="org.apache.beam.runners.dataflow.util.OutputReference" />
    <Field name="type" />
    <Bug pattern="SS_SHOULD_BE_STATIC" />
    <!-- Field read via reflection -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.dataflow.options.DataflowPipelineOptionsTest" />
    <Field name="restoreSystemProperties" />
    <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
    <!-- TestRule used automatically by JUnit framework -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.dataflow.TestDataflowRunner" />
    <Method name="waitForStreamingJobTermination" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
    <!-- waitForStreamingJobTermination checks status via job.waitUntilFinish() -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.direct.ExecutorServiceParallelExecutor$QueueMessageReceiver" />
    <Or>
      <Method name="failed" />
      <Method name="cancelled" />
      <Method name="completed" />
    </Or>
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
    <!-- updates is a non-capacity-limited LinkedBlockingQueue, which
      can never refuse an offered update -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.direct.portable.ExecutorServiceParallelExecutor$QueueMessageReceiver" />
    <Or>
      <Method name="failed" />
      <Method name="cancelled" />
      <Method name="completed" />
    </Or>
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
    <!-- updates is a non-capacity-limited LinkedBlockingQueue, which
      can never refuse an offered update -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.direct.portable.job.ReferenceRunnerJobService" />
    <Method name="run" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
    <!-- the success of future methods aren't based on the returned value of the future -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.spark.util.BroadcastHelper$CodedBroadcastHelper"/>
    <Or>
      <Field name="bcast" />
      <Field name="value" />
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
    <!--
      Spark's Broadcast variables are a distributed and cached objects
      and should not be treated as "normal" objects.
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.spark.util.BroadcastHelper$DirectBroadcastHelper"/>
    <Or>
      <Field name="bcast" />
      <Field name="value" />
    </Or>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
    <!--
      Spark's Broadcast variables are a distributed and cached objects
      and should not be treated as "normal" objects.
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.spark.metrics.sink.CsvSink"/>
    <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
    <!-- Intentionally overriding parent name because inheritors should replace the parent. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.spark.metrics.sink.GraphiteSink"/>
    <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
    <!-- Intentionally overriding parent name because inheritors should replace the parent. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.io.LocalResourceId"/>
    <Method name="getCurrentDirectory" />
    <Bug pattern="NP_NULL_PARAM_DEREF"/>
    <!--
      Path.getParent() could return null. However, we check the returned Path is not null.
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.extensions.gcp.storage.GcsResourceId"/>
    <Method name="getCurrentDirectory" />
    <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
    <!--
      GcsPath.getParent() could return null. However, we check the returned Path is not null.
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ZipFiles"/>
    <Method name="zipDirectory" />
    <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
    <!--
      File.listFiles() will return null if the File instance is not a directory. Null dereference is
      not a possibility here since we validate sourceDirectory is directory via
      sourceDirectory.isDirectory()
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.util.ZipFiles"/>
    <Method name="zipDirectoryInternal" />
    <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
    <!--
      File.listFiles() will return null if the File instance is not a directory. Null dereference is
      not a possibility here since we validate sourceDirectory is directory via
      sourceDirectory.isDirectory()
    -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.core.StateMerging"/>
    <Method name="prefetchRead" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch call readLater -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runner.core.PaneInfoTracker"/>
    <Method name="getNextPaneInfo" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch side effect -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runner.core.SystemReduceFn"/>
    <Method name="prefetchOnTrigger" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch side effect -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runner.core.WatermarkHold"/>
    <Method name="extractAndRelease" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch call readLater -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.core.triggers.AfterDelayFromFirstElementStateMachine"/>
    <Method name="prefetchOnElement" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch side effect -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.core.triggers.AfterDelayFromFirstElementStateMachine"/>
    <Method name="prefetchShouldFire" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch side effect -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.core.triggers.AfterPaneStateMachine"/>
    <Method name="prefetchShouldFire" />
    <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
    <!-- prefetch side effect -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.core.triggers.TriggerStateMachines$StateMachineConverter"/>
    <Method name="evaluateSpecific" />
    <Bug pattern="UPM_UNCALLED_PRIVATE_METHOD"/>
    <!-- Called via reflection -->
  </Match>

  <!--
    Baseline issues. No new issues should be added below this line and all existing issues should
    have an associated JIRA
  -->

  <Match>
    <Class name="org.apache.beam.sdk.coders.JAXBCoder"/>
    <Method name="getContext"/>
    <Bug pattern="DC_DOUBLECHECK"/>
    <!--[BEAM-398] Possible double check of field-->
  </Match>
  <Match>
    <Class name="org.apache.beam.sdk.testing.WindowSupplier"/>
    <Field name="windows"/>
    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
    <!--[BEAM-407] Inconsistent synchronization -->
  </Match>
  <Match>
    <Class name="org.apache.beam.sdk.util.CombineFnUtil$NonSerializableBoundedCombineFn"/>
    <Field name="context"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--
      The class is not meant to be serializable, writeObject() just throws an exception. Therefore
      it's reasonable for this field to also not be serializable.
    -->
  </Match>
  <Match>
    <Class name="org.apache.beam.runners.core.WatermarkHold"/>
    <Field name="timerInternals"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--[BEAM-420] Non-transient non-serializable instance field in serializable class-->
  </Match>
  <Match>
    <Class name="StateSpecs$CombiningStateSpec"/>
    <Method name="equals"/>
    <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
    <!--[BEAM-421] Class doesn't override equals in superclass-->
  </Match>
  <Match>
    <Class name="org.apache.beam.sdk.util.ClassPath$ClassInfo"/>
    <Method name="equals"/>
    <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
    <!--[BEAM-1676] Class doesn't override equals in superclass-->
  </Match>
  <Match>
    <Class name="org.apache.beam.sdk.util.AutoValue_GcsUtil_StorageObjectOrIOException"/>
    <Bug pattern="NM_CLASS_NOT_EXCEPTION"/>
    <!-- It is clear from the name that this class holds either StorageObject or IOException. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.extensions.gcp.util.GcsUtil$StorageObjectOrIOException"/>
    <Bug pattern="NM_CLASS_NOT_EXCEPTION"/>
    <!-- It is clear from the name that this class holds either StorageObject or IOException. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.direct.ParDoMultiOverrideFactory$StatefulParDo"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
    <!-- PTransforms do not actually support serialization. -->
  </Match>

  <Match>
    <Class name="org.apache.beam.sdk.options.ProxyInvocationHandler"/>
    <Field name="~.*"/>
    <Bug pattern="SE_BAD_FIELD"/>
    <!--
      ProxyInvocationHandler implements Serializable only for the sake of throwing an informative
      exception in writeObject()
    -->
  </Match>

  <Match>
    <!--
  Classes in this package is auto-generated, let's disable the findbugs for it.
  -->
    <Package name="org.apache.beam.sdk.extensions.sql.impl.parser.impl"/>
  </Match>

  <Match>
    <!--
  Classes in this package is auto-generated, let's disable the findbugs for it.
  -->
    <Package name="org.apache.beam.sdk.schemas.parser.generated"/>
  </Match>

  <Match>
    <!--
  Classes in this package is auto-generated, let's disable the findbugs for it.
  -->
    <Package name="org.apache.beam.sdk.io.clickhouse.impl.parser"/>
  </Match>

  <Match>
    <Class name="org.apache.beam.runners.fnexecution.control.DockerJobBundleFactory$SimpleStageBundleFactory"/>
    <Field name="wrappedClient"/>
    <Bug pattern="URF_UNREAD_FIELD"/>
    <!-- Fix build. -->
  </Match>
</FindBugsFilter>
