<?xml version="1.0"?>
<!--
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 -->

<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">

<!--
  Checkstyle checks configured for Maven.
-->

<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="cacheFile" value="${checkstyle.cache.file}"/>

    <!-- ************************************************************** -->
    <!-- Checks that are different from the sun coding conventions ones -->
    <!-- ************************************************************** -->
    <module name="Header">
      <property name="headerFile" value="${maven.checkstyle.header.file}"/>
      <property name="ignoreLines" value="1,2,3,4,5,6"/>
    </module>
    <property name="tabWidth" value="4"/>
    <module name="LeftCurly">
      <property name="option" value="eol"/>
    </module>
    <module name="RightCurly">
      <property name="option" value="alone"/>
    </module>
    <module name="LineLength">
      <property name="max" value="132"/>
    </module>
    <module name="MethodLength">
      <property name="max" value="175"/>
    </module>
    <!-- No Paren pad check
    <module name="ParenPad"/>
    -->
    <module name="ConstantName">
      <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
    </module>

    <!-- ************************************************************** -->
    <!-- Default Sun coding conventions checks                          -->
    <!-- ************************************************************** -->

    <!-- Checks for Javadoc comments.                     -->
    <!-- See http://checkstyle.sf.net/config_javadoc.html -->
    <module name="JavadocMethod">
      <property name="allowUndeclaredRTE" value="true"/>
      <property name="allowMissingParamTags" value="true"/>
      <property name="allowMissingThrowsTags" value="true"/>
      <property name="allowMissingReturnTag" value="true"/>
    </module>
    <module name="JavadocType"/>
    <!--
    <module name="JavadocVariable"/>
    -->


    <!-- Checks for Naming Conventions.                  -->
    <!-- See http://checkstyle.sf.net/config_naming.html -->
    <module name="LocalFinalVariableName"/>
    <module name="LocalVariableName"/>
    <module name="MethodName"/>
    <module name="PackageName"/>
    <module name="ParameterName"/>
    <module name="StaticVariableName"/>
    <module name="TypeName"/>
    <module name="MemberName"/>

    <!-- 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="ParameterNumber"/>


    <!-- Checks for whitespace                               -->
    <!-- See http://checkstyle.sf.net/config_whitespace.html -->
    <module name="EmptyForIteratorPad"/>
    <module name="OperatorWrap"/>
    <module name="TabCharacter"/>

    <!--
      <module name="NoWhitespaceAfter"/>
      <module name="NoWhitespaceBefore"/>
      <module name="WhitespaceAfter"/>
      <module name="WhitespaceAround"/>
      -->


    <!-- 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="NeedBraces"/>


    <!-- Checks for common coding problems               -->
    <!-- See http://checkstyle.sf.net/config_coding.html -->
    <module name="AvoidInlineConditionals"/>
    <module name="DoubleCheckedLocking"/>    <!-- MY FAVOURITE -->
    <module name="EmptyStatement"/>
    <module name="EqualsHashCode"/>
    <module name="HiddenField"/>
    <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="FinalClass"/>
    <module name="HideUtilityClassConstructor"/>
    <module name="InterfaceIsType"/>
    <module name="VisibilityModifier"/>


    <!-- Miscellaneous other checks.                   -->
    <!-- See http://checkstyle.sf.net/config_misc.html -->
    <module name="ArrayTypeStyle"/>
    <!-- <module name="FinalParameters"/> -->
    <module name="GenericIllegalRegexp">
      <property name="format" value="\s+$"/>
      <property name="message" value="Line has trailing spaces."/>
    </module>
    <module name="TodoComment"/>
    <module name="UpperEll"/>

  </module>

</module>
