<!--
  ~ 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"
"http://www.puppycrawl.com/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="org/apache/carbondata/processing/newflow/sort/unsafe/sort/TimSort.java"/>
    <suppress checks=".*"
              files="org/apache/carbondata/core/memory/HeapMemoryAllocator"/>
</suppressions>
