Version 4
    <?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">
        <property name="severity" value="error"/>
        <module name="Translation"/>
        
        <module name="TreeWalker">
            <property name="cacheFile" value="${checkstyle.cache.file}"/>
    
            <!-- Checks for Javadoc comments.                              -->
            <!-- See http://checkstyle.sourceforge.net/config_javadoc.html -->
            <module name="JavadocMethod">
                <property name="scope" value="public"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="JavadocType">
                <property name="severity" value="warning"/>
            </module>
            <module name="JavadocVariable">
                <property name="scope" value="public"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="JavadocStyle">
                <property name="checkEmptyJavadoc" value="true"/>
                <property name="checkFirstSentence" value="false"/>
            </module>
    
            <!-- Checks for Naming Conventions.                           -->
            <!-- See http://checkstyle.sourceforge.net/config_naming.html -->
            <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"/>
    
            <!-- Checks for imports                                       -->
            <!-- See http://checkstyle.sourceforge.net/config_import.html -->
            <module name="AvoidStarImport">
                <property name="severity" value="warning"/>
            </module>
            <module name="IllegalImport"/>
            <module name="RedundantImport"/>
            <module name="UnusedImports"/>
    
            <!-- Checks for Size Violations.                             -->
            <!-- See http://checkstyle.sourceforge.net/config_sizes.html -->
            <module name="FileLength">
                <property name="max" value="1000"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="LineLength">
                <property name="max" value="120"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="MethodLength">
                <property name="tokens" value="METHOD_DEF"/>
                <property name="max" value="60"/>
                <!-- I think must be 30 -->
                <property name="countEmpty" value="false"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="AnonInnerLength">
                <property name="max" value="40"/>
            </module>
            <module name="ParameterNumber">
                <property name="severity" value="warning"/>
            </module>
    
            <!-- Checks for whitespace                                        -->
            <!-- See http://checkstyle.sourceforge.net/config_whitespace.html -->
            <module name="TabCharacter"/>
            <module name="EmptyForIteratorPad">
                <property name="severity" value="info"/>
            </module>
            <module name="MethodParamPad">
                <property name="severity" value="info"/>
            </module>
            <module name="NoWhitespaceAfter">
                <property name="severity" value="info"/>
            </module>
            <module name="NoWhitespaceBefore">
                <property name="severity" value="info"/>
            </module>
            <module name="OperatorWrap">
                <property name="severity" value="info"/>
            </module>
            <module name="ParenPad">
                <property name="severity" value="info"/>
            </module>
            <module name="TypecastParenPad">
                <property name="tokens" value="RPAREN,TYPECAST"/>
                <property name="severity" value="info"/>
            </module>
            <module name="WhitespaceAfter">
                <property name="severity" value="info"/>
            </module>
            <module name="WhitespaceAround">
                <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,LITERAL_ASSERT,TYPE_EXTENSION_AND"/>
                <property name="severity" value="info"/>
            </module>
    
            <!-- Modifier Checks                                            -->
            <!-- See http://checkstyle.sourceforge.net/config_modifier.html -->
            <module name="ModifierOrder">
                <property name="severity" value="warning"/>
            </module>
            <module name="RedundantModifier">
                <property name="severity" value="info"/>
            </module>
    
            <!-- Checks for blocks. You know, those {}'s              -->
            <!-- http://checkstyle.sourceforge.net/config_blocks.html -->
            <module name="AvoidNestedBlocks">
                <property name="allowInSwitchCase" value="true"/>
            </module>
            <module name="EmptyBlock">
                <property name="option" value="text"/>
            </module>
            <module name="LeftCurly"/>
            <module name="NeedBraces"/>
            <module name="RightCurly"/>
    
            <!-- Checks for common coding problems               -->
            <!-- See http://checkstyle.sourceforge.net/config_coding.html -->
            <module name="CovariantEquals"/>
            <module name="DoubleCheckedLocking"/>
            <module name="EmptyStatement"/>
            <module name="EqualsHashCode"/>
            <module name="IllegalInstantiation"/>
            <module name="InnerAssignment"/>
            <module name="MagicNumber">
                <property name="ignoreNumbers" value="-1, 0, 1"/>
            </module>
            <module name="MissingSwitchDefault"/>
            <module name="ModifiedControlVariable"/>
            <module name="RedundantThrows"/>
            <module name="SimplifyBooleanExpression"/>
            <module name="SimplifyBooleanReturn"/>
            <module name="StringLiteralEquality"/>
            <module name="NestedIfDepth">
                <property name="max" value="3"/>
                <property name="severity" value="warning"/>
            </module>
            <module name="NestedTryDepth">
                <property name="max" value="2"/>
            </module>
            <module name="IllegalCatch">
                <property name="illegalClassNames" value="java.lang.Throwable, java.lang.RuntimeException, java.lang.Error"/>
            </module>
            <module name="IllegalThrows"/>
            <module name="DeclarationOrder">
                <property name="severity" value="warning"/>
            </module>
            <module name="ParameterAssignment"/>
            <module name="DefaultComesLast"/>
            <module name="FallThrough"/>
            <module name="MultipleVariableDeclarations"/>
            <module name="UnnecessaryParentheses">
                <property name="severity" value="info"/>
            </module>
    
            <!-- Checks for class design                                  -->
            <!-- See http://checkstyle.sourceforge.net/config_design.html -->
            <module name="FinalClass"/>
            <module name="HideUtilityClassConstructor"/>
            <module name="InterfaceIsType">
                <property name="severity" value="warning"/>
            </module>
            <module name="VisibilityModifier">
                <property name="packageAllowed" value="true"/>
                <property name="protectedAllowed" value="true"/>
            </module>
    
    
            <!-- Miscellaneous other checks.                               -->
            <!-- See http://checkstyle.sourceforge.net/config_metrics.html -->
            <module name="CyclomaticComplexity">
                <property name="severity" value="warning"/>
            </module>
    
            <!-- Miscellaneous other checks.                   -->
            <!-- See http://checkstyle.sf.net/config_misc.html -->
            <module name="ArrayTypeStyle"/>
            <module name="UpperEll"/>
            <module name="ParameterName"/>
            <module name="DeclarationOrder"/>
            <module name="FallThrough"/>
            <module name="HiddenField">
                <property name="tokens" value="VARIABLE_DEF"/>
            </module>
            <module name="GenericIllegalRegexp">
                <property name="format" value="\r(?!\n)"/>
                <property name="message" value="Wrong line break"/>
            </module>
            <module name="UncommentedMain">
                <property name="severity" value="warning"/>
            </module>
            <module name="TodoComment">
                <property name="format" value="TODO"/>
                <property name="severity" value="warning"/>
            </module>
    
            <module name="Indentation"/>
        </module>
    </module>