<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
          "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
<module name="Checker">
	<!-- ######## TEMPLATE/CHECKSTYLE/SIZE.XML ######## !-->
    <module name="com.puppycrawl.tools.checkstyle.TreeWalker">
        
        <!-- See http://checkstyle.sf.net/config_sizes.html !-->
        <!-- Checks for long lines. !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.sizes.LineLengthCheck">
            <property name="ignorePattern" value="^$"/>
            <property name="max"           value="120"/>
        </module>
        
        <!-- Checks the number of methods declared in each type. This includes the number of each scope !-->
        <!-- (private, package, protected and public) as well as an overall total. !-->
        <!-- See http://checkstyle.sourceforge.net/config_sizes.html#MethodCount !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.sizes.MethodCountCheck">
            <property name="maxTotal"     value="100"/>
            <property name="maxPrivate"   value="100"/>
            <property name="maxPackage"   value="100"/>
            <property name="maxProtected" value="100"/>
            <property name="maxPublic"    value="100"/>
        </module>
        
        <!-- Checks for long methods and constructors. !-->
        <!-- See http://checkstyle.sf.net/config_sizes.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.sizes.MethodLengthCheck">
            <property name="max"        value="80"/>
            <property name="countEmpty" value="true"/>
            <property name="tokens"     value="METHOD_DEF, CTOR_DEF"/>
        </module>
        
        <!-- Checks for the number of types declared at the outer (or root) level in a file. !-->
        <!-- See http://checkstyle.sourceforge.net/config_sizes.html#OuterTypeNumber !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.sizes.OuterTypeNumberCheck">
            <property name="max" value="1"/>
        </module>
        
        <!-- Checks the number of parameters of a method or constructor. !-->
        <!-- See http://checkstyle.sf.net/config_sizes.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.sizes.ParameterNumberCheck">
            <property name="max"    value="7"/>
            <property name="tokens" value="METHOD_DEF, CTOR_DEF"/>
        </module>
        
    </module>
    <!-- ######## END OF TEMPLATE/CHECKSTYLE/SIZE.XML ######## !-->
    
	
    <!-- ######## TEMPLATE/CHECKSTYLE/NAMING.XML ######## !-->
    <module name="com.puppycrawl.tools.checkstyle.TreeWalker">
        <!-- Checks that the outer type name and the file name match. !-->
        <!-- See http://checkstyle.sourceforge.net/config_misc.html#OuterTypeFilename !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.OuterTypeFilenameCheck"/>
        
        <!-- Checks for class type parameter name naming conventions. !-->
        <!-- See http://checkstyle.sourceforge.net/config_naming.html#ClassTypeParameterName !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.ClassTypeParameterNameCheck">
            <property name="format" value="^[A-Z]$"/>
        </module>
        
        <!-- Checks for constant name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.ConstantNameCheck">
            <property name="format"           value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
            <property name="applyToPublic"    value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage"   value="true"/>
            <property name="applyToPrivate"   value="true"/>
        </module>
        
        <!-- Checks for local final variable name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.LocalFinalVariableNameCheck">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
            <property name="tokens" value="VARIABLE_DEF, PARAMETER_DEF"/>
        </module>
        
        <!-- Checks for local variable name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.LocalVariableNameCheck">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
            <!--<property name="tokens" value="VARIABLE_DEF, PARAMETER_DEF"/>-->
        </module>
        
        <!-- Checks for member variable name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.MemberNameCheck">
            <property name="format"           value="^[a-z][a-zA-Z0-9]*$"/>
            <property name="applyToPublic"    value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage"   value="true"/>
            <property name="applyToPrivate"   value="true"/>
        </module>
        
        <!-- Checks for method name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.MethodNameCheck">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        
        <!-- Checks for method type parameter name naming conventions. !-->
        <!-- See http://checkstyle.sourceforge.net/config_naming.html#MethodTypeParameterName !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.MethodTypeParameterNameCheck">
            <property name="format" value="^[A-Z]$"/>
        </module>
        
        <!-- Checks for package name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.PackageNameCheck">
            <property name="format" value="^[a-z]+(\.[a-zA-Z_][a-zA-Z0-9_]*)*$"/>
        </module>
        
        <!-- Checks for parameter name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.ParameterNameCheck">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>
        
        <!-- Checks for static variable name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.StaticVariableNameCheck">
            <property name="format"           value="^[a-z][a-zA-Z0-9]*$"/>
            <property name="applyToPublic"    value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage"   value="true"/>
            <property name="applyToPrivate"   value="true"/>
        </module>
        
        <!-- Checks for type name naming conventions. !-->
        <!-- See http://checkstyle.sf.net/config_naming.html !-->
        <module name="com.puppycrawl.tools.checkstyle.checks.naming.TypeNameCheck">
            <property name="format"           value="^[A-Z][a-zA-Z0-9]*$"/>
            <property name="tokens"           value="CLASS_DEF, INTERFACE_DEF"/>
            <property name="applyToPublic"    value="true"/>
            <property name="applyToProtected" value="true"/>
            <property name="applyToPackage"   value="true"/>
            <property name="applyToPrivate"   value="true"/>
        </module>
        
    </module>
    
    <!-- ######## END OF TEMPLATE/CHECKSTYLE/NAMING.XML ######## !-->
    
    
</module>
