<?xml version="1.0" encoding="UTF-8"?>
<!--
  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">
<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 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="SuppressWarningsFilter" />

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

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

    <!-- Checks for Headers                                -->
    <!-- See http://checkstyle.sf.net/config_header.html   -->
     <!--<module name="Header">-->
        <!--<property name="headerFile" value="${checkstyle.header.file}"/>-->
         <!--<property name="fileExtensions" value="java"/>-->
     <!--</module>-->

  <module name="TreeWalker">
    <module name="SuppressWarningsHolder" />

    <property name="cacheFile" value="${checkstyle.cache.file}"/>

    <!-- Checks for Javadoc comments.                     -->
    <!-- See http://checkstyle.sf.net/config_javadoc.html -->
    <!--<module name="JavadocMethod"/>-->
    <!--<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 imports                              -->
    <!-- See http://checkstyle.sf.net/config_import.html -->
    <module name="IllegalImport"/>
    <!-- defaults to sun.* packages -->
    <module name="RedundantImport"/>
    <module name="UnusedImports">
      <property name="processJavadoc" value="true" />
    </module>


    <!-- Checks for Size Violations.                    -->
    <!-- See http://checkstyle.sf.net/config_sizes.html -->
    <!--<module name="LineLength">-->
      <!--<property name="max" value="120"/>-->
    <!--</module>-->
    <!--<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="NoWhitespaceAfter"/>-->
    <!--<module name="NoWhitespaceBefore"/>-->
    <!--<module name="OperatorWrap"/>-->
    <!--<module name="ParenPad"/>-->
    <!--<module name="TypecastParenPad"/>-->
    <!--<module name="WhitespaceAfter"/>-->

    <!-- 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="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="HiddenField">-->
      <!--<property name="ignoreSetter" value="true"/>-->
    <!--</module>-->
    <module name="IllegalInstantiation"/>
    <!--<module name="InnerAssignment"/>-->
    <!--<module name="MagicNumber">-->
      <!--<property name="ignoreHashCodeMethod" value="true"/>-->
    <!--</module>-->
    <!--<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="FinalClass"/>
    <!--<module name="HideUtilityClassConstructor"/>-->
    <!--<module name="InterfaceIsType"/>-->
    <!--<module name="VisibilityModifier">-->
      <!--<property name="packageAllowed" value="true"/>-->
      <!--<property name="protectedAllowed" value="true"/>-->
    <!--</module>-->

    <!-- Miscellaneous other checks.                   -->
    <!-- See http://checkstyle.sf.net/config_misc.html -->
    <module name="ArrayTypeStyle"/>
    <!--<module name="TodoComment"/>-->
    <!--<module name="UpperEll"/>-->

  </module>

</module>
