<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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.2//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<!--

  Checkstyle configuration that checks the sun coding conventions from:

    - the Java Language Specification at
      http://java.sun.com/docs/books/jls/second_edition/html/index.html

    - the Sun Code Conventions at http://java.sun.com/docs/codeconv/

    - the Javadoc guidelines at
      http://java.sun.com/j2se/javadoc/writingdoccomments/index.html

    - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html

    - some best practices

  Checkstyle is very configurable. Be sure to read the documentation at
  http://checkstyle.sf.net (or in your downloaded distribution).

  Most Checks are configurable, be sure to consult the documentation.

  To completely disable a check, just comment it out or delete it from the file.

  Finally, it is worth reading the documentation.

-->
<module name="Checker">
  <!-- If you set the basedir property below, then all reported file names will be relative to the specified directory. See http://checkstyle.sourceforge.net/5.x/config.html#Checker 
    <property name="basedir" value="${basedir}"/> -->

  <!-- Checks that each Java package has a Javadoc file used for commenting. -->
  <!-- See http://checkstyle.sf.net/config_javadoc.html#JavadocPackage -->
  <module name="JavadocPackage">
    <property name="allowLegacy" value="true" />
  </module>

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

  <!-- Following interprets the header file as regular expressions. -->
  <!-- <module name="RegexpHeader"/> -->

  <module name="FileTabCharacter">
    <property name="eachLine" value="true" />
  </module>

  <module name="RegexpSingleline">
    <!-- \s matches whitespace character, $ matches end of line. -->
    <property name="format" value="\s+$" />
    <property name="message" value="Line has trailing spaces." />
  </module>

  <module name="LineLength">
    <property name="max" value="160" />
  </module>

  <module name="TreeWalker">

    <module name="ExplicitInitializationCheck" />
    <!-- Checks for Javadoc comments. -->
    <!-- See http://checkstyle.sf.net/config_javadoc.html -->
    <module name="JavadocType" />
    <module name="JavadocVariable" />
    <module name="JavadocStyle" />

    <!-- 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. See property -->
    <!-- expansion, -->
    <!-- http://checkstyle.sf.net/config.html#properties -->
    <!-- <property -->
    <!-- name="headerFile" -->
    <!-- value="${basedir}/java.header"/> -->
    <!-- </module> -->

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

    <!-- Checks for whitespace -->
    <!-- See http://checkstyle.sf.net/config_whitespace.html -->
    <module name="EmptyForIteratorPad" />
    <module name="MethodParamPad" />
    <module name="OperatorWrap" />
    <module name="ParenPad" />
    <module name="TypecastParenPad" />
    <module name="WhitespaceAfter" />
    <module name="WhitespaceAround" />
    <module name="GenericWhitespace" />

    <!-- 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="EmptyStatement" />
    <module name="EqualsHashCode" />
    <module name="IllegalInstantiation" />
    <module name="InnerAssignment" />
    <module name="MagicNumber" />
    <module name="MissingSwitchDefault" />
    <module name="SimplifyBooleanExpression" />
    <module name="SimplifyBooleanReturn" />

    <!-- Checks for class design -->
    <!-- See http://checkstyle.sf.net/config_design.html -->
    <module name="FinalClass" />
    <module name="InterfaceIsType" />


    <!-- Miscellaneous other checks. -->
    <!-- See http://checkstyle.sf.net/config_misc.html -->
    <module name="ArrayTypeStyle" />
    <module name="TodoComment" />
    <module name="UpperEll" />
    <module name="ImportOrder">
      <property name="option" value="top"/>
      <property name="groups" value="java,javax,org"/>
      <property name="ordered" value="true"/>
      <property name="separated" value="true"/>
    </module>

  </module>

</module>
