<?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="(.*)optimizer[/\\]costs[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>
	<!--Only additional checks for test sources. Those checks were present in the "pre-strict" checkstyle but were not applied to test sources. We do not want to suppress them for sources directory-->
	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]costs[/\\](.*)"
		checks="AvoidStarImport"/>

	<suppress
		files="(.*)optimizer[/\\]dag[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]dataproperties[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>
	<!--Only additional checks for test sources. Those checks were present in the "pre-strict" checkstyle but were not applied to test sources. We do not want to suppress them for sources directory-->
	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]dataproperties[/\\](.*)"
		checks="AvoidStarImport"/>

	<suppress
		files="(.*)optimizer[/\\]operators[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|MethodNameCheck|LocalFinalVariableName|LocalVariableName|EmptyLineSeparator"/>
	<!--Only additional checks for test sources. Those checks were present in the "pre-strict" checkstyle but were not applied to test sources. We do not want to suppress them for sources directory-->
	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]operators[/\\](.*)"
		checks="AvoidStarImport"/>

	<suppress
		files="(.*)optimizer[/\\]plan[/\\](.*)"
		checks="RedundantModifier|JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]plandump[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]plantranslate[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]postpass[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]traversals[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|ConstantNameCheck|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]util[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)optimizer[/\\]([^/\\]*\.java)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|LocalVariableName|EmptyLineSeparator"/>
	<!--Only additional checks for test sources. Those checks were present in the "pre-strict" checkstyle but were not applied to test sources. We do not want to suppress them for sources directory-->
	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]([^/\\]*\.java)"
		checks="AvoidStarImport"/>

	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]testfunctions[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]programs[/\\](.*)"
		checks="JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]java[/\\](.*)"
		checks="AvoidStarImport|JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|LocalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]dataexchange[/\\](.*)"
		checks="AvoidStarImport|JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>

	<suppress
		files="(.*)test[/\\](.*)optimizer[/\\]custompartition[/\\](.*)"
		checks="AvoidStarImport|JavadocMethod|JavadocParagraph|JavadocType|JavadocStyle|StaticVariableNameCheck|MemberNameCheck|LocalFinalVariableName|EmptyLineSeparator"/>
</suppressions>
