<!--
   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>
    <Package name="org.apache.carbondata.format"/>
  </Match>

  <Match>
    <Source name="~.*\.scala"/>
  </Match>

  <Match>
    <Source name="~.*Test\.java"/>
  </Match>

  <!-- This method creates stream but the caller methods are responsible for closing the stream -->
  <Match>
    <Class name="org.apache.carbondata.core.datastore.impl.FileFactory"/>
    <Method name="getDataInputStream"/>
    <Bug pattern="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.datastore.impl.FileReaderImpl"/>
    <Method name="getDataInputStream"/>
    <Bug pattern="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.constants.CarbonCommonConstants"/>
    <Bug pattern="MS_MUTABLE_ARRAY"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.scan.expression.ExpressionResult"/>
    <Method name="getBoolean"/>
    <Bug pattern="NP_BOOLEAN_RETURN_NULL"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.metadata.schema.table.column.CarbonImplicitDimension"/>
    <Method name="equals"/>
    <Bug pattern="EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.statusmanager.LoadMetadataDetails"/>
    <Method name="getTimeStamp"/>
    <Bug pattern="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.index.IndexInputFormat"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.indexstore.UnsafeMemoryDMStore"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <!--
    Returning a reference to a mutable object value stored in one of the object's fields exposes
    the internal representation of the object.  If instances are accessed by untrusted code,
    and unchecked changes to the mutable object would compromise security or other important
    properties, you will need to do something different. Returning a new copy of the object is
    better approach in many situations.

    We have getters on our internal fields. Questionable, but out of findbugs scope. Returning a
    copy is not practical in most cases.
    !-->
    <Bug pattern="EI_EXPOSE_REP"/>
  </Match>
  <Match>
    <Bug pattern="EI_EXPOSE_REP2"/>
  </Match>
  <Match>
    <!--
    This class implements the Comparator interface. You should consider whether or not it should
    also implement the Serializable interface. If a comparator is used to construct an ordered
    collection such as a TreeMap, then the TreeMap will be serializable only if the comparator
    is also serializable. As most comparators have little or no state, making them serializable
    is generally easy and good defensive programming.
    !-->
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.scan.aggregator.impl.BitSet"/>
    <Or>
      <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
    </Or>
  </Match>
  <Match>
    <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON"/>
  </Match>
  <Match>
    <Bug pattern="DP_DO_INSIDE_DO_PRIVILEGED"/>
  </Match>
  <Match>
    <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR"/>
  </Match>
  <Match>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.index.Segment"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.index.IndexFilter"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.core.index.IndexFilter"/>
    <Bug pattern="SE_BAD_FIELD"/>
  </Match>
  <Match>
    <Class name="org.apache.carbondata.events.OperationContext"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <Class name="~org.apache.spark.sql.secondaryindex.jobs.BlockletIndexInputFormat"/>
    <Field name="indexExprWrapper"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>
  <Match>
    <Class name="~org.apache.spark.sql.secondaryindex.jobs.BlockletIndexInputFormat"/>
    <Field name="validSegments"/>
    <Bug pattern="SE_TRANSIENT_FIELD_NOT_RESTORED"/>
  </Match>

  <Match>
    <Package name="org.apache.spark.sql.parser"/>
  </Match>
</FindBugsFilter>