<?xml version="1.0"?>
<!--
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">

<suppressions>
		<suppress files="DataTypes.java" checks="MethodNameCheck"/>

		<!-- target directory is not relevant for checkstyle -->
		<suppress
			files="[\\/]target[\\/]"
			checks=".*"/>
		<!-- Benchmark CPU metrics collector based on YARN  -->
		<suppress
			files="org[\\/]apache[\\/]paimon[\\/]benchmark[\\/]metric[\\/]cpu[\\/].*"
			checks=".*"/>
		<!-- Classes copied from AWS -->
		<suppress
				files="com[\\/]amazonaws[\\/]services[\\/]s3[\\/]model[\\/]transform[\\/]XmlResponsesSaxParser.java"
				checks=".*"/>
</suppressions>
