<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
    <Match>
      <!-- That code is auto generated -->
      <Package name="~com\.puppycrawl\.tools\.checkstyle\.grammar.*" />
    </Match>
    <Match>
      <!-- We are not aware of encoding of files that user has, so using user encoding is ok -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.LineSeparatorOption" />
      <Bug pattern="DM_DEFAULT_ENCODING" />
    </Match>
    <Match>
      <!-- see a reason of suppression at #910 -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.UniquePropertiesCheck$UniqueProperties" />
      <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
    </Match>
    <Match>
      <!-- false-positive, as Map will return null if key is not found -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.indentation.LineWrappingHandler" />
      <Method name="collectFirstNodes" />
      <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
      <!-- it is ok here, as business meaning of that cases is not the same,
           it is occasional similarity -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.blocks.RightCurlyCheck" />
      <Method name="visitToken" />
      <Bug pattern="DB_DUPLICATE_SWITCH_CLAUSES" />
    </Match>
    <Match>
      <!-- false positive, condition elements are not the same -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.indentation.LineWrappingHandler" />
      <Method name="collectFirstNodes" />
      <Bug pattern="RpC_REPEATED_CONDITIONAL_TEST" />
    </Match>
    <Match>
      <!-- false positive, "preceded" is returned from method as result -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.whitespace.NoWhitespaceAfterCheck" />
      <Method name="getPreceded" />
      <Bug pattern="DLS_DEAD_LOCAL_STORE" />
    </Match>
    <Match>
      <!-- that CLI class so we need system exit code there, but only in main(...) method -->
      <Class name="com.puppycrawl.tools.checkstyle.Main" />
      <Method name="main" />
      <Bug pattern="DM_EXIT" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.Main" />
        <Method name="loadProperties" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile" />
        <Method name="load" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile" />
        <Method name="loadExternalResource" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile" />
        <Method name="persist" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask" />
        <Method name="createOverridingProperties" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.OrderedPropertiesCheck" />
        <Method name="processFiltered" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.TranslationCheck" />
        <Method name="getTranslationKeys" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.UniquePropertiesCheck" />
        <Method name="processFiltered" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
    </Match>
    <Match>
        <!-- till https://github.com/spotbugs/spotbugs/issues/259 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile" />
        <Method name="loadExternalResource" />
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE" />
    </Match>
    <Match>
      <!-- have never been a case for years, Eclipse does not show any other classes
           inherited from CommonASTWithHiddenTokens -->
      <Class name="com.puppycrawl.tools.checkstyle.DetailAstImpl" />
      <Bug pattern="BC_UNCONFIRMED_CAST" />
    </Match>
    <Match>
      <!-- The structure of frames relies on the AST structure which relies on correct/compilable
        java files. It is ok to have direct casts to subtypes there. Any problems at runtime do
        mean serious problems in the algorithm or AST generation. -->
      <Class name="com.puppycrawl.tools.checkstyle.checks.coding.RequireThisCheck"/>
      <Or>
        <Bug pattern="BC_UNCONFIRMED_CAST"/>
        <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE"/>
      </Or>
    </Match>
    <Match>
      <!-- false positive, beginTree is a kind of constructor for Checks -->
      <Or>
        <Class name="com.puppycrawl.tools.checkstyle.checks.AvoidEscapedUnicodeCharactersCheck" />
        <Class name="com.puppycrawl.tools.checkstyle.checks.coding.RequireThisCheck" />
        <Class name="com.puppycrawl.tools.checkstyle.checks.coding.DeclarationOrderCheck" />
        <Class name="com.puppycrawl.tools.checkstyle.checks.OuterTypeFilenameCheck" />
        <Class name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpCheck" />
        <!-- createJavadocNode is private and can not be launched without visitToken-->
        <Class name="com.puppycrawl.tools.checkstyle.checks.javadoc.AbstractJavadocCheck" />
        <!-- has only one public method and all initialized in that method-->
        <Class name="com.puppycrawl.tools.checkstyle.checks.regexp.MultilineDetector" />
        <!-- beginProcessing() is kind of c-tor -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpMultilineCheck" />
        <Class name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineCheck" />
        <!--Uses setters to set fields values-->
        <Class name="com.puppycrawl.tools.checkstyle.api.AbstractCheck" />
        <!-- We cannot modify fields since we won't have the values
                to create the instance until the setters are called -->
        <Class name="com.puppycrawl.tools.checkstyle.filters.SuppressionSingleFilter"/>
        <Class name="com.puppycrawl.tools.checkstyle.filters.SuppressionXpathSingleFilter"/>
      </Or>
      <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" />
    </Match>
    <Match>
        <!--
         False-positive. ExternalResource cannot be null there.
         FindBugs rise violation due to @Nullable annotation on 'apply' method.
         See
         https://stevewall123.wordpress.com/2014/12/18/findbugs-warning-with-guavas-predicate-interface/
         See
         http://stackoverflow.com/questions/12422473/nullable-input-in-google-guava-function-interface-triggers-findbugs-warning
         -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile$1" />
        <Method name="apply" />
        <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE" />
    </Match>
    <Match>
        <!-- false-positive. Bugs reported even though casting is done only
             after verification using instanceof -->
        <Class name="com.puppycrawl.tools.checkstyle.JavadocDetailNodeParser"/>
        <Method name="parseJavadocAsDetailNode"/>
        <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.Main"/>
        <Method name="loadProperties"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- won't fix: field values are injected by picocli -->
        <Or>
            <Class name="com.puppycrawl.tools.checkstyle.Main"/>
            <Class name="com.puppycrawl.tools.checkstyle.JavadocPropertiesGenerator"/>
        </Or>
        <Or>
            <Bug pattern="NP_UNWRITTEN_FIELD"/>
            <Bug pattern="UWF_UNWRITTEN_FIELD"/>
            <Bug pattern="MS_SHOULD_BE_FINAL"/>
            <Bug pattern="MS_SHOULD_BE_REFACTORED_TO_BE_FINAL"/>
            <Bug pattern="SS_SHOULD_BE_STATIC"/>
        </Or>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.PackageNamesLoader"/>
        <Method name="processFile"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile"/>
        <Method name="flushAndCloseOutStream"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile"/>
        <Method name="load"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.header.AbstractHeaderCheck"/>
        <Method name="loadHeaderFile"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask"/>
        <Method name="createOverridingProperties"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile"/>
        <Method name="persist"/>
        <Bug pattern="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.PropertyCacheFile"/>
        <Method name="persist"/>
        <Bug pattern="NP_NULL_PARAM_DEREF"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.TranslationCheck"/>
        <Method name="getTranslationKeys"/>
        <Bug pattern="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/5403 -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.UniquePropertiesCheck"/>
        <Method name="processFiltered"/>
        <Bug pattern="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH"/>
    </Match>
    <Match>
        <!-- false-positive. See details at https://github.com/checkstyle/checkstyle/pull/6343 -->
        <Class
        name="com.puppycrawl.tools.checkstyle.checks.OrderedPropertiesCheck$SequencedProperties"/>
        <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
    </Match>
    <Match>
        <!-- It is better to catch all exceptions since it can throw a runtime exception. -->
        <Class name="com.puppycrawl.tools.checkstyle.checks.TranslationCheck"/>
        <Method name="getTranslationKeys"/>
        <Bug pattern="REC_CATCH_EXCEPTION"/>
    </Match>
</FindBugsFilter>
