<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
    <module name="SuppressionCommentFilter"/>
    <module name="SuppressWithNearbyCommentFilter">
        <property name="commentFormat" value="NO CHECKSTYLE (\w+)"/>
    </module>
    <module name="NewlineAtEndOfFile">
        <property name="severity" value="info"/>
        <property name="lineSeparator" value="system"/>
    </module>
    <module name="FileTabCharacter">
        <property name="severity" value="error"/>
    </module>
    <module name="FileLength">
        <property name="severity" value="warning"/>
        <property name="max" value="2000"/>
    </module>
    <module name="RegexpSingleline">
        <property name="severity" value="error"/>
        <property name="format" value="System.out.println"/>
    </module>
    <module name="TreeWalker">
        <module name="FileContentsHolder"/>
        <module name="InterfaceIsType">
            <property name="severity" value="error"/>
            <property name="allowMarkerInterfaces" value="true"/>
        </module>
        <module name="HiddenField">
            <property name="severity" value="error"/>
            <property name="tokens" value="VARIABLE_DEF"/>
            <property name="ignoreConstructorParameter" value="true"/>
            <property name="ignoreSetter" value="true"/>
            <property name="ignoreAbstractMethods" value="false"/>
        </module>
        <module name="ParameterAssignment">
            <property name="severity" value="error"/>
        </module>
        <module name="TypecastParenPad">
            <property name="severity" value="warning"/>
            <property name="tokens" value="TYPECAST,RPAREN"/>
        </module>
        <module name="LocalVariableName">
            <property name="severity" value="error"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="NoWhitespaceBefore">
            <property name="severity" value="error"/>
            <property name="allowLineBreaks" value="false"/>
            <property name="tokens" value="SEMI,POST_DEC,POST_INC"/>
        </module>
        <module name="StaticVariableName">
            <property name="severity" value="error"/>
            <property name="applyToPublic" value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage" value="true"/>
            <property name="applyToPrivate" value="true"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="ParameterName">
            <property name="severity" value="error"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="FinalClass">
            <property name="severity" value="error"/>
        </module>
        <module name="ParenPad">
            <property name="severity" value="info"/>
            <property name="tokens" value="CTOR_CALL,LPAREN,METHOD_CALL,RPAREN,SUPER_CTOR_CALL"/>
        </module>
        <module name="ParameterNumber">
            <property name="severity" value="warning"/>
            <property name="max" value="7"/>
            <property name="tokens" value="METHOD_DEF,CTOR_DEF"/>
        </module>
        <module name="WhitespaceAfter">
            <property name="severity" value="error"/>
            <property name="tokens" value="COMMA,SEMI,TYPECAST"/>
        </module>
        <module name="UpperEll">
            <property name="severity" value="info"/>
        </module>
        <module name="LocalFinalVariableName">
            <property name="severity" value="error"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="TypeName">
            <property name="severity" value="error"/>
            <property name="applyToPublic" value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage" value="true"/>
            <property name="applyToPrivate" value="true"/>
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
        </module>
        <module name="MemberName">
            <property name="severity" value="error"/>
            <property name="applyToPublic" value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage" value="true"/>
            <property name="applyToPrivate" value="true"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="NeedBraces">
            <property name="severity" value="error"/>
            <property name="tokens" value="LITERAL_DO,LITERAL_ELSE,LITERAL_IF,LITERAL_FOR,LITERAL_WHILE"/>
        </module>
        <module name="VisibilityModifier">
            <property name="severity" value="error"/>
            <property name="packageAllowed" value="false"/>
            <property name="protectedAllowed" value="false"/>
            <property name="publicMemberPattern" value="^serialVersionUID$"/>
        </module>
        <module name="PackageName">
            <property name="severity" value="error"/>
            <property name="format" value="^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"/>
        </module>
        <module name="IllegalImport">
            <property name="severity" value="error"/>
        </module>
        <module name="RedundantThrows">
            <property name="severity" value="info"/>
            <property name="allowUnchecked" value="false"/>
            <property name="allowSubclasses" value="false"/>
        </module>
        <module name="TodoComment">
            <property name="severity" value="info"/>
            <property name="format" value="TODO:"/>
        </module>
        <module name="AvoidNestedBlocks">
            <property name="severity" value="warning"/>
            <property name="allowInSwitchCase" value="false"/>
        </module>
        <module name="HideUtilityClassConstructor">
            <property name="severity" value="error"/>
        </module>
        <module name="MultipleVariableDeclarations">
            <property name="severity" value="error"/>
        </module>
        <module name="ExplicitInitialization">
            <property name="severity" value="warning"/>
        </module>
        <module name="JavadocStyle">
            <property name="severity" value="warning"/>
            <property name="checkFirstSentence" value="false"/>
            <property name="checkEmptyJavadoc" value="false"/>
            <property name="checkHtml" value="true"/>
            <property name="tokens" value="INTERFACE_DEF,CLASS_DEF,METHOD_DEF,CTOR_DEF,VARIABLE_DEF"/>
        </module>
        <module name="SimplifyBooleanReturn">
            <property name="severity" value="warning"/>
        </module>
        <module name="SimplifyBooleanExpression">
            <property name="severity" value="warning"/>
        </module>
        <module name="InnerAssignment">
            <property name="severity" value="error"/>
            <property name="tokens" value="ASSIGN,BAND_ASSIGN,BOR_ASSIGN,BSR_ASSIGN,BXOR_ASSIGN,DIV_ASSIGN,MINUS_ASSIGN,MOD_ASSIGN,PLUS_ASSIGN,SL_ASSIGN,SR_ASSIGN,STAR_ASSIGN"/>
        </module>
        <module name="ModifiedControlVariable">
            <property name="severity" value="warning"/>
        </module>
        <module name="MagicNumber">
            <property name="severity" value="info"/>
            <property name="tokens" value="NUM_DOUBLE,NUM_FLOAT,NUM_INT,NUM_LONG"/>
            <property name="ignoreNumbers" value="-1,0,1,2,60,24,7,31,32"/> <!-- 60,24 & 7 are used when calculating dates.  31 in hash. 32 is Magic Johnson's number so it gets a free pass -->
            <property name="ignoreAnnotation" value="true" />
        </module>
        <module name="IllegalInstantiation">
            <property name="severity" value="warning"/>
        </module>
        <module name="RedundantModifier">
            <property name="severity" value="error"/>
            <property name="tokens" value="METHOD_DEF,VARIABLE_DEF,ANNOTATION_FIELD_DEF"/>
        </module>
        <module name="LeftCurly">
            <property name="severity" value="error"/>
            <property name="option" value="eol"/>
            <property name="maxLineLength" value="80"/>
            <property name="tokens" value="CLASS_DEF,CTOR_DEF,INTERFACE_DEF,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,METHOD_DEF"/>
        </module>
        <module name="MethodName">
            <property name="severity" value="error"/>
            <property name="allowClassName" value="false"/>
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        <module name="AvoidStarImport">
            <property name="excludes" value="org.hamcrest.Matchers"/>
            <property name="severity" value="error"/>
        </module>
        <module name="EmptyForIteratorPad">
            <property name="severity" value="info"/>
        </module>
        <module name="EmptyBlock">
            <property name="severity" value="warning"/>
            <property name="tokens" value="LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_IF,LITERAL_FOR,LITERAL_TRY,LITERAL_WHILE,INSTANCE_INIT,STATIC_INIT"/>
        </module>
        <module name="EqualsAvoidNull">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodLength">
            <property name="severity" value="warning"/>
            <property name="max" value="150"/>
            <property name="countEmpty" value="true"/>
            <property name="tokens" value="METHOD_DEF,CTOR_DEF"/>
        </module>
        <module name="EqualsHashCode">
            <property name="severity" value="error"/>
        </module>
        <module name="StringLiteralEquality">
            <property name="severity" value="warning"/>
        </module>
        <module name="MethodParamPad">
            <property name="severity" value="warning"/>
            <property name="allowLineBreaks" value="false"/>
            <property name="tokens" value="CTOR_DEF,LITERAL_NEW,METHOD_CALL,METHOD_DEF,SUPER_CTOR_CALL"/>
        </module>
        <module name="MissingSwitchDefault">
            <property name="severity" value="warning"/>
        </module>
        <module name="EmptyStatement">
            <property name="severity" value="info"/>
        </module>
        <module name="RightCurly">
            <property name="severity" value="error"/>
            <property name="tokens" value="LITERAL_TRY,LITERAL_CATCH,LITERAL_FINALLY,LITERAL_IF,LITERAL_ELSE"/>
        </module>
        <module name="ConstantName">
            <property name="severity" value="error"/>
            <property name="applyToPublic" value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage" value="true"/>
            <property name="applyToPrivate" value="true"/>
            <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
        </module>
        <module name="ArrayTypeStyle">
            <property name="severity" value="info"/>
            <property name="javaStyle" value="true"/>
        </module>
        <module name="UnusedImports">
            <property name="severity" value="error"/>
            <property name="processJavadoc" value="true"/>
        </module>
        <module name="WhitespaceAround">
            <property name="severity" value="info"/>
            <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,GENERIC_START,GENERIC_END,TYPE_EXTENSION_AND,WILDCARD_TYPE"/>
            <property name="allowEmptyConstructors" value="false"/>
            <property name="allowEmptyMethods" value="false"/>
        </module>
        <module name="ModifierOrder">
            <property name="severity" value="error"/>
        </module>
        <module name="NoWhitespaceAfter">
            <property name="severity" value="info"/>
            <property name="allowLineBreaks" value="true"/>
            <property name="tokens" value="ARRAY_INIT,BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/>
        </module>
        <module name="ClassTypeParameterName">
            <property name="format" value="^[A-Z]$"/>
        </module>
        <module name="BooleanExpressionComplexity">
            <property name="severity" value="error"/>
        </module>
        <module name="IllegalThrows">
            <property name="severity" value="error"/>
        </module>
        <module name="CyclomaticComplexity">
            <property name="max" value="10"/>
        </module>
        <module name="RedundantImport"/>
    </module>
</module>