<!--
  ~ 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
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"https://checkstyle.org/dtds/suppressions_1_1.dtd">

<!--

    This file contains suppression rules for Checkstyle checks.
    Ideally only files that cannot be modified (e.g. third-party code)
    should be added here. All other violations should be fixed.

-->

<suppressions>
    <suppress checks=".*"
              files="core/src/main/java/org/apache/spark/util/collection/TimSort.java"/>
    <suppress checks=".*"
              files="external/spark-ganglia-lgpl/src/main/java/com/codahale/metrics/ganglia/GangliaReporter.java"/>
    <suppress checks=".*"
              files="sql/core/src/main/java/org/apache/spark/sql/api.java/*"/>
    <suppress checks="LineLength"
              files="src/test/java/org/apache/spark/sql/hive/test/Complex.java"/>
    <suppress checks="LineLength"
              files="src/main/java/org/apache/spark/examples/JavaLogQuery.java"/>
    <suppress checks="LineLength"
              files="src/main/java/org/apache/hive/service/*"/>
    <suppress checks="MethodName"
              files="src/main/java/org/apache/hive/service/auth/PasswdAuthenticationProvider.java"/>
    <suppress checks="MethodName"
              files="sql/catalyst/src/main/java/org/apache/spark/sql/streaming/OutputMode.java"/>
    <suppress checks="MethodName"
              files="sql/catalyst/src/main/java/org/apache/spark/sql/streaming/GroupStateTimeout.java"/>
    <suppress checks="MethodName"
              files="sql/core/src/main/java/org/apache/spark/sql/streaming/Trigger.java"/>
</suppressions>
