<?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="Header">
        <property name="headerFile" value="dev-support/checkstyle-apache-header.txt"/>
        <property name="fileExtensions" value="java"/>
        <property name="ignoreLines" value="9, 11, 17"/>
    </module>
    <module name="FileTabCharacter"/>
    <module name="SuppressWarningsFilter"/>
    <module name="TreeWalker">

        <!-- Checks for Naming Conventions.                  -->
        <!-- See http://checkstyle.sf.net/config_naming.html -->
        <!-- <module name="ConstantName"/> -->
        <module name="LocalVariableName"/>
        <module name="LocalFinalVariableName">
            <property name="format" value="^[a-zA-Z0-9]*$$"/>
        </module>
        <module name="MemberName"/>
        <!-- <module name="MethodName"/> -->
        <!-- <module name="ParameterName"/> -->
        <!-- <module name="StaticVariableName"/> -->
        <module name="TypeName"/>

        <module name="AvoidStarImport"/>
        <module name="IllegalImport"/>
        <module name="RedundantImport"/>
        <module name="UnusedImports">
            <property name="processJavadoc" value="true"/>
        </module>
        <!-- <module name="SimplifyBooleanExpression"/> -->
        <module name="OneStatementPerLine"/>
        <!-- <module name="SimplifyBooleanReturn"/> -->

        <!-- code quality -->
        <module name="LineLength">
            <property name="max" value="1000"/>
            <property name="ignorePattern"
                      value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
        </module>
        <module name="MethodLength">
            <property name="max" value="300"/>
        </module>
        <module name="MethodParamPad"/>
        <module name="ParameterNumber">
            <!-- default is 8 -->
            <property name="max" value="12"/>
        </module>
        <module name="BooleanExpressionComplexity">
            <!-- default is 3 -->
            <property name="max" value="5"/>
        </module>

        <module name="ParenPad"/>
        <module name="EmptyStatement"/>
        <module name="EmptyBlock">
            <property name="option" value="text"/>
        </module>
        <module name="EqualsHashCode"/>
        <module name="IllegalInstantiation"/>
        <!--<module name="InnerAssignment"/>-->
        <module name="MissingSwitchDefault"/>
        <!--<module name="FinalClass"/>-->
        <!--<module name="HideUtilityClassConstructor"/>-->
        <!--<module name="InterfaceIsType"/>-->
        <!--<module name="VisibilityModifier"/>-->
        <module name="ArrayTypeStyle"/>
        <module name="LeftCurly"/>
        <module name="RightCurly"/>
        <module name="UpperEll"/>
        <!--<module name="NoFinalizer"/>-->
        <!--<module name="MissingDeprecated"/>-->
        <module name="WhitespaceAfter">
            <property name="tokens" value="COMMA"/>
        </module>
        <module name="SuppressWarningsHolder"/>
    </module>
</module>
