<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
<!--
   
   ObjectLab Checkstyle.
-->

<module name="Checker">
   <!-- Checks that a package.html file exists for each package.     -->
   <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
   <module name="PackageHtml" />
   <!-- Checks whether files end with a new line.                        -->
   <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile 
      <module name="NewlineAtEndOfFile"/>-->
   <!-- Checks that property files contain the same keys.         -->
   <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
   <module name="Translation" />
   <module name="TreeWalker">
      <property name="tabWidth" value="4"/>
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for Javadoc comments.                     -->
      <!-- See http://checkstyle.sf.net/config_javadoc.html - ->
         <module name="JavadocMethod">
         <property name="scope" value="public"/>
         </module>
         <module name="JavadocType"/>
         <module name="JavadocVariable"/>
      -->
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for Naming Conventions.                  -->
      <!-- See http://checkstyle.sf.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 Headers                              -->
      <!-- See http://checkstyle.sf.net/config_header.html -->
      <!--        <module name="Header">  -->
      <!-- The follow property value demonstrates the ability     -->
      <!-- to have access to ANT properties. In this case it uses -->
      <!-- the ${basedir} property to allow Checkstyle to be run  -->
      <!-- from any directory within a project.                   -->
      <!--            <property name="headerFile" value="${basedir}/java.header"/>
         </module>
      -->
      <!-- Following interprets the header file as regular expressions. -->
      <!-- <module name="RegexpHeader"/>                                -->
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for imports                              -->
      <!-- See http://checkstyle.sf.net/config_import.html -->
      <module name="AvoidStarImport" />
      <module name="IllegalImport" />
      <!-- defaults to sun.* packages -->
      <module name="RedundantImport" />
      <module name="UnusedImports" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for Size Violations.                    -->
      <!-- See http://checkstyle.sf.net/config_sizes.html -->
      <module name="FileLength" />
      <module name="LineLength">
         <property name="max" value="160" />
      </module>
      <module name="MethodLength">
         <property name="max" value="200" />
      </module>
      <module name="ParameterNumber">
         <property name="max" value="8" />
      </module>
      <module name="AnonInnerLength">
         <property name="max" value="25" />
      </module>
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for whitespace                               -->
      <!-- See http://checkstyle.sf.net/config_whitespace.html -->
      <module name="EmptyForIteratorPad" />
      <!--    <module name="NoWhitespaceAfter"/>
         <module name="NoWhitespaceBefore"/>
         <module name="WhitespaceAfter"/>
         <module name="WhitespaceAround"/>
      -->
      <module name="OperatorWrap" />
      <module name="ParenPad" />
      <module name="TypecastParenPad" />
      <!--<module name="TabCharacter" />-->
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Modifier Checks                                    -->
      <!-- See http://checkstyle.sf.net/config_modifiers.html -->
      <module name="ModifierOrder" />
      <module name="RedundantModifier" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for blocks. You know, those {}'s         -->
      <!-- See http://checkstyle.sf.net/config_blocks.html -->
      <module name="AvoidNestedBlocks" />
      <module name="EmptyBlock" />
      <module name="LeftCurly" />
      <module name="NeedBraces" />
      <module name="RightCurly" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for common coding problems               -->
      <!-- See http://checkstyle.sf.net/config_coding.html -->
      <!--        <module name="AvoidInlineConditionals"/> -->
      <module name="DoubleCheckedLocking" />
      <module name="EmptyStatement" />
      <module name="EqualsHashCode" />
      <module name="HiddenField">
         <property name="ignoreSetter" value="true" />
         <property name="ignoreConstructorParameter" value="true" />
      </module>
      <module name="IllegalInstantiation" />
      <module name="InnerAssignment" />
      <module name="MagicNumber" />
      <module name="MissingSwitchDefault" />
      <module name="RedundantThrows" />
      <module name="SimplifyBooleanExpression" />
      <module name="SimplifyBooleanReturn" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Checks for class design                         -->
      <!-- See http://checkstyle.sf.net/config_design.html -->
      <!--        <module name="DesignForExtension"/>  -->
      <module name="MutableException" />
      <module name="FinalClass" />
      <module name="HideUtilityClassConstructor" />
      <module name="InterfaceIsType" />
      <module name="VisibilityModifier" />
      <module name="ThrowsCount">
         <property name="max" value="5" />
      </module>
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- Miscellaneous other checks.                   -->
      <!-- See http://checkstyle.sf.net/config_misc.html -->
      <module name="ArrayTypeStyle" />
      <module name="FinalParameters">
         <property name="tokens" value="CTOR_DEF" />
      </module>
      <module name="GenericIllegalRegexp">
         <!-- . matches any character, so we need to escape it and use \. to match dots. -->
         <property name="format" value="System\.out\.println" />
      </module>
      <module name="GenericIllegalRegexp">
         <!-- . matches any character, so we need to escape it and use \. to match dots. -->
         <property name="format" value="System\.err\.println" />
      </module>
      <module name="TodoComment" />
      <module name="UpperEll" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- New Tests with 3.2 -->
      <module name="CyclomaticComplexity">
         <property name="max" value="15" />
         <!--            <property name="severity" value="ignore"/> -->
      </module>
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- See http://checkstyle.sf.net/config_usage.html -->
      <!--	<module name="usage.OneMethodPrivateField"/> 
         <module name="usage.UnusedLocalVariable"/>
         <module name="usage.UnusedParameter">
         <property name="ignoreFormat" value="^ignore"/>
         </module>
         <module name="usage.UnusedPrivateField">
         <property name="ignoreFormat" value="serialVersionUID"/>
         </module>
         <module name="usage.UnusedPrivateMethod">
         <property name="ignoreFormat" value="readObject$|writeObject$|readResolve$"/>
         </module>-->
      <module name="StringLiteralEquality" />
      <module name="SuperClone" />
      <module name="SuperFinalize" />
      <module name="NestedIfDepth">
         <property name="max" value="3" />
      </module>
      <module name="NestedTryDepth" />
      <module name="ReturnCount">
         <property name="max" value="3" />
      </module>
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- j2ee stuff -->
      <module name="j2ee.FinalStatic" />
      <module name="j2ee.LocalHomeInterface" />
      <module name="j2ee.LocalInterface" />
      <module name="j2ee.MessageBean" />
      <module name="j2ee.RemoteHomeInterface" />
      <module name="j2ee.RemoteInterface" />
      <module name="j2ee.SessionBean" />
      <module name="j2ee.ThisParameter" />
      <module name="j2ee.ThisReturn" />
      <!--  ============================== -->
      <!--  ============================== -->
      <!-- New 3.4 tests -->
      <module name="BooleanExpressionComplexity">
         <property name="max" value="7" />
      </module>
      <module name="ClassDataAbstractionCoupling">
         <property name="max" value="13" />
      </module>
      <module name="NPathComplexity" />
      <module name="FallThrough" />
      <module name="MultipleVariableDeclarations" />
      <!-- <module name="UnnecessaryParentheses"/> -->
      <!-- New 3.4 tests -->
   </module>
   <!--
      <module name="SuppressionFilter">
      <property name="file" value="lib/build/checkstyle-suppressions.xml"/>
      </module>
   -->
</module>

