<?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="charset" value="UTF-8"/>
    <property name="severity" value="error"/>
    <property name="fileExtensions" value="java, properties, xml"/>

    <!-- File format -->
    <module name="NewlineAtEndOfFile">
        <property name="lineSeparator" value="lf"/>
    </module>

    <module name="FileTabCharacter">
        <property name="eachLine" value="true"/>
    </module>

    <module name="RegexpSingleline">
        <property name="format" value="\s+$"/>
        <property name="minimum" value="0"/>
        <property name="maximum" value="0"/>
        <property name="message" value="Line has trailing spaces."/>
    </module>

    <module name="TreeWalker">
        <!--Filter some parameter names-->
        <module name="SuppressionCommentFilter"/>
        <!-- Checks for Naming Conventions. -->
        <module name="ConstantName"/>
        <module name="LocalFinalVariableName"/>
        <module name="LocalVariableName"/>
        <module name="MemberName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*[_]?$"/>
        </module>
        <module name="MethodName"/>
        <module name="PackageName"/>
        <module name="ParameterName"/>
        <module name="SingleSpaceSeparator"/>
        <module name="StaticVariableName"/>
        <module name="TypeName"/>
        <module name="AbbreviationAsWordInName">
            <property name="allowedAbbreviations" value="HPUX"/>
        </module>
        <module name="CatchParameterName"><!-- as google's -->
            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
        </module>
        <module name="ClassTypeParameterName"/>
        <module name="MethodTypeParameterName"/>
        <module name="InterfaceTypeParameterName"/>

        <!-- Checks for Annotation. -->
        <module name="AnnotationLocation"/>
        <module name="AnnotationUseStyle"/>

        <!-- Checks for imports. -->
        <module name="RedundantImport"/>
        <module name="UnusedImports"/>

        <!-- Checks for whitespace. -->
        <module name="EmptyForIteratorPad">
            <property name="option" value="space"/>
        </module>
        <module name="GenericWhitespace"/>
        <module name="MethodParamPad"/>
        <module name="NoWhitespaceAfter"/>
        <module name="NoWhitespaceBefore">
            <property name="tokens" value="COMMA, POST_INC, POST_DEC, ELLIPSIS"/>
        </module>
        <module name="OperatorWrap">
            <property name="option" value="eol"/>
        </module>
        <module name="ParenPad"/>
        <module name="TypecastParenPad"/>
        <module name="WhitespaceAfter"/>
        <module name="WhitespaceAround"/>
        <module name="NoLineWrap"/>
        <module name="EmptyForInitializerPad"/>

        <!-- Modifier Checks. -->
        <module name="ModifierOrder"/>
        <module name="RedundantModifier"/>

        <!-- Checks for blocks. -->
        <module name="EmptyBlock">
            <property name="option" value="text"/>
        </module>
        <module name="LeftCurly"/>
        <module name="RightCurly"/>
        <module name="EmptyCatchBlock">
            <property name="commentFormat" value="ignore error"/>
        </module>

        <!-- Checks for common coding problems. -->
        <module name="EmptyStatement"/>
        <module name="EqualsHashCode"/>
        <module name="IllegalInstantiation"/>
        <module name="MissingSwitchDefault"/>
        <module name="SimplifyBooleanExpression"/>
        <module name="SimplifyBooleanReturn"/>
        <module name="ArrayTrailingComma"/>
        <module name="VariableDeclarationUsageDistance"/>
        <module name="SuperFinalize"/>
        <module name="StringLiteralEquality"/>
        <module name="OuterTypeNumber"/>
        <module name="PackageDeclaration"/>
        <module name="DefaultComesLast"/>
        <module name="FallThrough"/>
        <module name="CovariantEquals"/>
        <module name="HiddenField">
            <property name="ignoreSetter" value="true"/>
            <property name="ignoreConstructorParameter" value="true"/>
        </module>

        <!-- Checks for class design. -->
        <module name="FinalClass"/>
        <module name="HideUtilityClassConstructor"/>
        <module name="InterfaceIsType"/>
        <module name="ThrowsCount"/>
        <module name="MutableException"/>
        <module name="OverloadMethodsDeclarationOrder"/>
        <module name="OneTopLevelClass"/>
        <module name="OneStatementPerLine"/>
        <module name="NoFinalizer"/>
        <module name="InnerTypeLast"/>
        <module name="VisibilityModifier">
            <property name="packageAllowed" value="true"/>
            <property name="protectedAllowed" value="true"/>
            <property name="publicMemberPattern" value="^$"/>
            <property name="allowPublicFinalFields" value="true"/>
            <property name="allowPublicImmutableFields" value="true"/>
        </module>

        <!-- Checks for metrics. -->
        <module name="CyclomaticComplexity">
            <property name="max" value="20"/>
            <property name="switchBlockAsSingleDecisionPoint" value="true"/>
            <property name="tokens"
                      value="LITERAL_WHILE, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_SWITCH, LITERAL_CASE, LITERAL_CATCH, QUESTION, LAND"/>
        </module>

        <!-- Miscellaneous other checks. -->
        <module name="ArrayTypeStyle"/>
        <module name="UpperEll"/>
        <module name="AvoidEscapedUnicodeCharacters"/>

        <module name="UncommentedMain">
            <property name="excludedClasses"
                      value="(com\.actiontech\.dble\.DbleStartup)|(com\.actiontech\.dble\.config\.loader\.zkprocess\.xmltozk\.XmltoZkMain)|(com\.actiontech\.dble\.util\.DecryptUtil)|(com\.actiontech\.dble\.util\.dataMigrator\.DataMigrator)|(com\.actiontech\.dble\.cluster\.xmltoKv\.XmltoCluster)"/>
        </module>
        <module name="Indentation">
            <property name="arrayInitIndent" value="8"/>
        </module>
        <module name="OuterTypeFilename"/>
        <module name="CommentsIndentation"/>
    </module>

    <module name="UniqueProperties"/>
    <module name="SuppressionFilter">
        <property name="file" value="dble_checkstyle_suppression.xml"/>
    </module>
</module>
