<?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 module PUBLIC
          "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
          "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<module name="Checker">

	<module name="SuppressionFilter">
		<property name="file" value="${checkstyle.suppressions.file}" />
	</module>

	<!-- Syntax:    //CHECKSTYLE.OFF: CheckstyleModuleToDisable - Reason for deactivation. -->
	<!--            //CHECKSTYLE.ON: CheckstyleModuleToReEnable                            -->
	<module name="SuppressionCommentFilter">
    		<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+) - (.+)"/>
    		<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
    		<property name="checkFormat" value="$1"/>
	</module>

    <module name="FileLength">
        <property name="max" value="2500"/>
    </module>

	<module name="TreeWalker">
		<module name="RegexpSinglelineJava">
			<property name="format" value="^\t* +\t*\S" />
			<property name="message"
				value="Line has leading space characters; indentation should be performed with tabs only." />
			<property name="ignoreComments" value="true" />
		</module>
		<module name="AvoidStarImport" />
		<module name="UnusedImports">
			<!-- Allow imports for JavaDocs -->
			<property name="processJavadoc" value="true"/>
		</module>
		<module name="IllegalImport">
			<property name="illegalPkgs" value="org.apache.flink.shaded"/>
		</module>
		<!-- forbid use of commons lang validate -->
		<module name="Regexp">
			<property name="format" value="org\.apache\.commons\.lang3\.Validate"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use Guava Checks instead of Commons Validate. Please refer to the coding guidelines."/>
		</module>
		<!-- forbid the use of org.apache.commons.lang.SerializationUtils -->
		<module name="Regexp">
			<property name="format" value="org\.apache\.commons\.lang\.SerializationUtils"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use Flink's InstantiationUtil instead of common's SerializationUtils"/>
		</module>
		<module name="Regexp">
			<property name="format" value="org\.apache\.commons\.lang3\.SerializationUtils"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use Flink's InstantiationUtil instead of common's SerializationUtils"/>
		</module>
		<module name="Regexp">
			<property name="format" value="org\.apache\.commons\.lang\."/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use commons-lang3 instead of commons-lang."/>
		</module>
		<module name="Regexp">
			<property name="format" value="org\.codehaus\.jettison"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use com.fasterxml.jackson instead of jettison."/>
		</module>
		<!-- Prohibit T.getT() methods for standard boxed types -->
		<module name="Regexp">
			<property name="format" value="Boolean\.getBoolean"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use System.getProperties() to get system properties."/>
		</module>

		<module name="Regexp">
			<property name="format" value="Integer\.getInteger"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use System.getProperties() to get system properties."/>
		</module>

		<module name="Regexp">
			<property name="format" value="Long\.getLong"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Use System.getProperties() to get system properties."/>
		</module>

		<module name="NeedBraces">
			<property name="tokens" value="LITERAL_IF, LITERAL_ELSE"/>
		</module>
		<module name="ArrayTypeStyle" />

		<module name="FileContentsHolder"/>

	<!--	<module name="ConstantName" />
		<module name="LocalFinalVariableName" />
		<module name="LocalVariableName" />
		<module name="MemberName" />
		<module name="MethodName" />
		<module name="PackageName" />
		<module name="ParameterName" />
  	<module name="StaticVariableName" />
		<module name="TypeName" />
		<module name="AvoidStarImport" />
		<module name="RedundantImport" />
		<module name="UnusedImports" />
	  <module name="MethodLength" />
		<module name="ParameterNumber" />
		<module name="AvoidNestedBlocks" />
		<module name="EmptyBlock" />
		<module name="LeftCurly" />
		<module name="NeedBraces" />
		<module name="RightCurly" /> 
		<module name="EmptyStatement" />
		<module name="EqualsHashCode" />
		<module name="IllegalInstantiation" />
		<module name="MissingSwitchDefault" />
		<module name="RedundantThrows" />
		<module name="SimplifyBooleanExpression" />
		<module name="SimplifyBooleanReturn" />
		<module name="HideUtilityClassConstructor" />
		<module name="InterfaceIsType" />
		<module name="VisibilityModifier" />
		<module name="ArrayTypeStyle" />
		<module name="UpperEll" /> -->
	</module>
</module>
