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

<!DOCTYPE suppressions PUBLIC
          "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
          "https://checkstyle.org/dtds/suppressions_1_2.dtd">

<suppressions>
  <suppress checks="JavadocPackage" files=".*[\\/]src[\\/]test[\\/].*"/>
  <suppress checks="JavadocPackage" files=".*[\\/]maven-archetypes[\\/].*"/>
  <suppress checks="JavadocPackage" files=".*[\\/]examples[\\/].*"/>
  <!-- Method javadoc not required in testing directories -->
  <suppress checks="JavadocMethod" files=".*[\\/]src[\\/]test[\\/].*"/>
  <!-- Class javadoc not required in testing directories -->
  <suppress checks="JavadocType" files=".*[\\/]src[\\/]test[\\/].*"/>

  <!-- suppress all checks in the generated directories -->
  <suppress checks=".*" files=".+[\\/]generated[\\/].+\.java" />
  <suppress checks=".*" files=".+[\\/]generated-sources[\\/].+\.java" />
  <suppress checks=".*" files=".+[\\/]generated-test-sources[\\/].+\.java" />

  <!-- suppress files that include additional lines in license -->
  <suppress checks="Header" files="AutoCloseables.java|Collections2.java" />

  <!-- Suppress certain checks requiring many code changes, that add little benefit -->
  <suppress checks="NoFinalizer|OverloadMethodsDeclarationOrder|VariableDeclarationUsageDistance" files=".*" />

</suppressions>
