<?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.1//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">

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

<module name="Checker">

  <property name="localeLanguage" value="en"/>

  <!-- No tabs allowed! -->
  <module name="FileTabCharacter"/>
    
  <module name="TreeWalker">
   
    <!-- Operator must be at end of wrapped line -->
    <module name="OperatorWrap">
      <property name="option" value="eol"/>
    </module>
    
    <!-- Interfaces must be types (not just constants) -->
    <module name="InterfaceIsType"/>

    <!-- Must have class / interface header comments -->
    <module name="JavadocType"/>
        
     <!-- Require method javadocs, allow undeclared RTE -->
    <module name="JavadocMethod">
      <property name="allowUndeclaredRTE" value="true"/>
      <property name="allowMissingThrowsTags" value="true"/>
    </module>
        
    <!-- Require field javadoc -->
    <module name="JavadocVariable">
      <property name="scope" value="protected"/>
    </module>
        
    <!-- No public fields -->
    <module name="VisibilityModifier">
       <property name="packageAllowed" value="true"/>
       <property name="protectedAllowed" value="true"/>
    </module>
    
    <!-- Require hash code override when equals is -->
    <module name="EqualsHashCode"/>
    
    <!-- Disallow unnecessary instantiation of Boolean, String -->
    <module name="IllegalInstantiation">
      <property name="classes" value="java.lang.Boolean, java.lang.String"/>
    </module>

    <!-- Required for SuppressionCommentFilter below -->
    <module name="FileContentsHolder"/>

  </module>
  
  <!-- Require package Javadoc -->
  <module name="JavadocPackage">
    <!-- setting allowLegacy means it will check for package.html instead of just package-info.java -->
    <property name="allowLegacy" value="true"/>
  </module>

  <!-- Setup special comments to suppress specific checks from source files -->
  <module name="SuppressionCommentFilter">
    <property name="offCommentFormat" value="CHECKSTYLE\: stop all checks"/>
    <property name="onCommentFormat"  value="CHECKSTYLE\: resume checking"/>
  </module>
  <module name="SuppressionCommentFilter">
    <property name="offCommentFormat" value="CHECKSTYLE\: stop VisibilityModifier"/>
    <property name="onCommentFormat"  value="CHECKSTYLE\: resume VisibilityModifier"/>
    <property name="checkFormat"      value="VisibilityModifier"/>
  </module>

</module>
