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

 <!-- Ignore some irrelevant serialization warnings -->
  <Match>
    <Class name="org.apache.hadoop.examples.SecondarySort$FirstGroupingComparator" />
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.examples.SecondarySort$IntPair$Comparator" />
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
  </Match>


 <!-- Ignore the irrelevant resource cleanup warnings-->
  <Match>
    <Class name="org.apache.hadoop.examples.DBCountPageView" />
    <Method name="verify" />
    <Bug pattern="OBL_UNSATISFIED_OBLIGATION" />
  </Match>

 <!-- Ignore the irrelevant closure warnings-->
  <Match>
    <Class name="org.apache.hadoop.examples.dancing.Pentomino$Piece" />
    <Bug pattern="EI_EXPOSE_REP2" />
  </Match>

  <!-- Ignore the irrelevant package protection warnings-->
  <Match>
    <Class name="org.apache.hadoop.examples.dancing.Pentomino" />
     <Or>
      <Field name="fourRotations" />
      <Field name="oneRotation" />
      <Field name="twoRotations" />
     </Or>
    <Bug pattern="MS_PKGPROTECT" />
  </Match>

   <!-- Ignore the irrelevant right shift warnings, as only positive integers are given as input-->
  <Match>
    <Class name="org.apache.hadoop.examples.terasort.Unsigned16" />
    <Method name="getHexDigit" />
    <Bug pattern="ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT" />
  </Match>

  <Match>
    <Class name="org.apache.hadoop.examples.terasort.TeraInputFormat" />
      <Method name="getSplits" />
    <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
  </Match>

</FindBugsFilter>
