<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">

<module name = "Checker">

    <property name="localeLanguage" value="en"/>

    <module name="FileTabCharacter"/>

    <!-- header -->
    <module name="RegexpHeader">
        <property name="headerFile" value="${checkstyle.header.file}"/>
        <property name="fileExtensions" value="java"/>
    </module>

    <module name="SuppressWarningsFilter" />

    <module name="TreeWalker">

        <!-- code cleanup -->
        <module name="UnusedImports">
            <property name="processJavadoc" value="true" />
        </module>
        <module name="RedundantImport"/>
        <module name="IllegalImport" />
        <module name="EqualsHashCode"/>
        <module name="SimplifyBooleanExpression"/>
        <module name="OneStatementPerLine"/>
        <module name="UnnecessaryParentheses" />
        <module name="SimplifyBooleanReturn"/>

        <!-- style -->
        <module name="DefaultComesLast"/>
        <module name="EmptyStatement"/>
        <module name="ArrayTypeStyle"/>
        <module name="UpperEll"/>
        <module name="LeftCurly"/>
        <module name="RightCurly"/>
        <module name="EmptyStatement"/>
        <module name="ConstantName">
            <property name="format" value="(^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)|(^log$)"/>
        </module>
        <module name="LocalVariableName"/>
        <module name="LocalFinalVariableName"/>
        <module name="MemberName"/>
        <module name="ClassTypeParameterName">
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$$"/>
        </module>
        <module name="MethodTypeParameterName">
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$$"/>
        </module>
        <module name="InterfaceTypeParameterName">
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$$"/>
        </module>
        <module name="PackageName"/>
        <module name="ParameterName"/>
        <module name="StaticVariableName"/>
        <module name="TypeName"/>
        <module name="AvoidStarImport"/>

        <!-- dependencies -->
        <!--<module name="ImportControl">
            <property name="file" value="${importControlFile}"/>
        </module>-->

        <!-- whitespace -->
        <module name="GenericWhitespace"/>
        <module name="NoWhitespaceBefore"/>
        <module name="WhitespaceAfter" />
        <module name="NoWhitespaceAfter"/>
        <module name="WhitespaceAround">
            <property name="allowEmptyConstructors" value="true"/>
            <property name="allowEmptyMethods" value="true"/>
        </module>
        <module name="Indentation"/>
        <module name="MethodParamPad"/>
        <module name="ParenPad"/>
        <module name="TypecastParenPad"/>

        <!-- locale-sensitive methods should specify locale -->
        <module name="Regexp">
            <property name="format" value="\.to(Lower|Upper)Case\(\)"/>
            <property name="illegalPattern" value="true"/>
            <property name="ignoreComments" value="true"/>
        </module>

        <!-- code quality -->
        <module name="MethodLength"/>
        <module name="ParameterNumber">
            <!-- default is 8 -->
            <property name="max" value="13"/>
        </module>
        <module name="ClassDataAbstractionCoupling">
            <!-- default is 7 -->
            <property name="max" value="20"/>
        </module>
        <module name="BooleanExpressionComplexity">
            <!-- default is 3 -->
            <property name="max" value="5"/>
        </module>

        <module name="ClassFanOutComplexity">
            <!-- default is 20 -->
            <property name="max" value="44"/>
        </module>
        <module name="CyclomaticComplexity">
            <!-- default is 10-->
            <property name="max" value="19"/>
        </module>
        <module name="JavaNCSS">
            <!-- default is 50 -->
            <property name="methodMaximum" value="100"/>
        </module>
        <module name="NPathComplexity">
            <!-- default is 200 -->
            <property name="max" value="5832"/>
        </module>

        <module name="IllegalToken">
            <property name="tokens" value="LITERAL_ASSERT"/>
        </module>

        <!-- Make the @SuppressWarnings annotations available to Checkstyle -->
        <module name="SuppressWarningsHolder" />
    </module>

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

    <!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation -->
    <module name="SuppressWarningsFilter" />
</module>

