<!--
   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>
  <!--
        For now, lets find only critical bugs from static code analyzer
  -->
  <Match>
    <Priority value="1"/>
    <Not>
      <Or>
        <Bug pattern="DM_DEFAULT_ENCODING" />
        <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
        <Bug pattern="MS_SHOULD_BE_FINAL" />
        <Bug pattern="RU_INVOKE_RUN" />
        <Bug pattern="DM_BOXED_PRIMITIVE_FOR_PARSING" />
        <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
        <Bug pattern="SE_BAD_FIELD" />
        <Bug pattern="NP_NULL_ON_SOME_PATH" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE" />
        <Bug pattern="HE_EQUALS_USE_HASHCODE" />
        <Bug pattern="RC_REF_COMPARISON" />
        <Bug pattern="MS_SHOULD_BE_REFACTORED_TO_BE_FINAL" />
        <Bug pattern="RV_EXCEPTION_NOT_THROWN" />
        <Bug pattern="DMI_INVOKING_TOSTRING_ON_ARRAY" />
        <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
        <Bug pattern="UC_USELESS_CONDITION" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
        <Bug pattern="MS_MUTABLE_COLLECTION" />
        <Bug pattern="DM_BOXED_PRIMITIVE_TOSTRING" />
        <Bug pattern="NP_NULL_PARAM_DEREF" />
        <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS" />
        <Bug pattern="IL_INFINITE_RECURSIVE_LOOP" />
        <Bug pattern="DMI_RANDOM_USED_ONLY_ONCE" />
        <Bug pattern="UI_INHERITANCE_UNSAFE_GETRESOURCE" />
      </Or>
    </Not>
  </Match>
  <!-- TODO: enable each priority one by one
  <Match>
      <Priority value="2"/>
  </Match>
  <Match>
      <Priority value="3"/>
  </Match>
  <Match>
      <Priority value="4"/>
  </Match>
  -->

</FindBugsFilter>
