<?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>
