<?xml version="1.0" encoding="UTF-8"?>

<document xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">

  <head>
    <title>Old Release Notes</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"/>
    <script type="text/javascript" src="js/anchors.js"/>
    <script type="text/javascript" src="js/google-analytics.js"/>
    <link rel="icon" href="images/favicon.png" type="image/x-icon" />
    <link rel="shortcut icon" href="images/favicon.ico" type="image/ico" />
  </head>

  <body>
    <section name="Release 5.7">
      <p>New features:</p>
      <ul>
        <li>
          Support
          <a href="config_filters.html#SuppressWarningsFilter">SuppressWarningsFilter</a>
          to use <code>@SuppressWarnings</code> annotations to suppress
          violations. Thanks to Trevor Robinson for patch #156.
        </li>
        <li>
          New: UniqueProperties check. Thanks to Pavel Baranchikov. <a href="https://github.com/checkstyle/checkstyle/pull/19">#19</a>
        </li>
        <li>
          Support for '&amp;' in nested generics. Thanks to <a
          href="https://github.com/dkomanov">dkomanov</a>.
        </li>
        <li>
          Allow HeaderCheck definition to be specified as URL. Thanks to
          tnarake.
        </li>
        <li>
          Allow additional URL schemes for SuppressionFilter
          configuration. Thanks to tnarake.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          added support for a separate throws indentation configuration
        </li>
        <li>
          SuppressionCommentFilter ignores messageFormat. Patch from Chris Brigham.
        </li>
        <li>
          Exclude some java.util classes from Class Fan out. Thanks to Ivan Sopov and Vincent Massol.<a href="https://github.com/checkstyle/checkstyle/issues/31">#31</a>
        </li>
        <li>
          Allow to ignore java.lang and certain other classes. Thanks to Ivan Sopov and Vincent Massol.<a href="https://github.com/checkstyle/checkstyle/issues/33">#33</a>
        </li>
        <li>
          RequireThisCheck doesn't check methods. Thanks to krzyk.<a href="https://github.com/checkstyle/checkstyle/issues/41">#41</a>
        </li>
        <li>
          Document WhitespaceAround for-each property. Thanks to Andrew Gaul.<a href="https://github.com/checkstyle/checkstyle/pull/15">#15</a>
        </li>
        <li>
          Other corrections for typos. Thanks to Andrew Gaul.<a href="https://github.com/checkstyle/checkstyle/pull/16">#16</a>
        </li>
        <li>
          Remnants of DoubleCheckedLocking were removed. Thanks to Antonio Ospite.
        </li>
      </ul>
      <p>Notes:</p>
      <ul>
        <li>
          Improved the performance of FileText construction, which
          increased file loading times by up to 30%.
        </li>
        <li>
          Upgraded dependencies to guava-jdk5 14.0.1 and JUnit 4.11.
        </li>
        <li>
           partial fix for "Sonarqube found problems in Checkstyle" <a href="https://github.com/checkstyle/checkstyle/issues/46">#46</a>.
        </li>
        <li>
          Remnants of DoubleCheckedLocking were removed. Thanks to
          Antonio Ospite.
        </li>
      </ul>
    </section>

    <section name="Release 5.6">
      <p>New features:</p>
      <ul>
        <li>
          <a href="config_filters.html#SuppressionFilter">SuppressionFilter</a>
          now supports loading a configuration from a URL
          reference. Thanks to Stephen for patch #3485185.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          Fixed bug in the grammar for an edge case (bug
          #1667137). Thanks to Lukas Platinsky for patch #3393810.
        </li>
        <li>
          <a href="config_coding.html#DeclarationOrder">DeclarationOrder</a>
          handles ignoreModifiers correctly (all fields should be before
          ctors and methods)(bug #3429775)
        </li>
        <li>
          <a href="config_coding.html#InnerAssignment">Inner assignment</a>
          is now allowed in try-with-resources (bug #3441097)
        </li>
        <li>
          Fixed bug in the grammar when builtin types are used in a
          generic declaration (bug #3553541).
        </li>
      </ul>
      <p>Notes:</p>
      <ul>
        <li>
          Removed the <code>DoubleCheckedLocking</code> check, as in Java 5
          (and beyond), using the <code>volatile</code> keyword addresses
          the issue. See
          <a href="http://jeremymanson.blogspot.com.au/2008/05/double-checked-locking.html">here</a>
          for more details.
        </li>
        <li>
          Added Turkish message translations. Thanks to poyrazus
          for patch #3460908.
        </li>
      </ul>
    </section>

    <section name="Release 5.5">
      <p>New features:</p>
      <ul>
        <li>
          Added Java 7 support to the grammar. Thanks to Dinesh
          Bolkensteyn for patch #3403265.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          Fix parsing error <code>unexpected char: 0xFFFF</code> which was
          triggered when a comment line is on a line without newline character.
          Thanks to Evgeny Mandrikov for patch #3367782.
        </li>
        <li>
          Fixed <a href="config_imports.html#UnusedImports">UnusedImports</a>
          to consider @linkplain, @throws and @exception tags when the option
          <code>processJavadoc</code> is turned on.
        </li>
        <li>
          <a href="config_coding.html#RequireThis">RequireThis</a> now
          ignores static members (bug #1155921).
        </li>
        <li>
          <a href="config_coding.html#HiddenField">HiddenField</a> now
          treats setxYz() as a setter for xYz, and setXYz() as a setter for
          XYz property to comply JavaBeans specification (bug #3370946).
        </li>
        <li>
          Fixed parsing errors for Unicode escape sequences. Thanks to
          Dinesh Bolkensteyn for patch #3412812.
        </li>
        <li>
          ignoreEnhancedForColon property added to
          <a href="config_whitespace.html#WhitespaceAround">WhitespaceAround</a>.
          Thanks to Travis Schneeberger for patch #1921815 (bug #1649038).
        </li>
      </ul>
    </section>

    <section name="Release 5.4">
      <p>New features:</p>
      <ul>
        <li>
          Enhanced <a href="config_imports.html#UnusedImports">UnusedImports</a>
          to have the option <code>processJavadoc</code> to detect whether
          imports are used. Thanks to Lyle Hanson for patch #3267984.
        </li>
        <li>
          Enhanced <a href="config_coding.html#MagicNumber">MagicNumber</a>
          to support ignoring numbers in annotation declarations. Thanks to
          Julio Cesar Cabral for patch #3132984.
        </li>
        <li>
          Enhanced
          <a href="config_coding.html#EqualsAvoidNull">EqualsAvoidNull</a>
          to process <code>String.equalsIgnoreCase()</code>
          invocations (which can be suppressed).
        </li>
        <li>
          Enhanced
          <a href="config_coding.html#IllegalThrows">IllegalThrows</a>
          to support ignoring methods with specified names. Thanks to
          Amit Shah for patch #3115439.
        </li>
        <li>
          Enhanced
          <a href="config_modifier.html#RedundantModifier">RedundantModifier</a>
          to support detecting inner <code>interface</code> declarations that
          are declared as <code>static</code>. Raised in bug #3222810.
        </li>
        <li>
          Enhanced the <a href="anttask.html#Parameters">ANT task</a>,
          <a href="cmdline.html#Command_line_usage">Command Line</a> and
          <a href="config_filters.html#SuppressionFilter">Suppression Filter</a> to be
          able to load their configuration file from either the filesystem or
          the classpath as a resource. Thanks to Tracy Snell for patch #3307526.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          Fix
          <a href="config_coding.html#MultipleVariableDeclarations">MultipleVariableDeclarations</a>
          to properly handle when multiple variable declarations are inside a
          for loop initializer. Thanks to Amit Shah for patch #3121071.
        </li>
        <li>
          Fix memory leak in FileContentsHolder. Thanks to Evgeny Mandrikov
          for patch #3323517.
        </li>
      </ul>
    </section>

    <section name="Release 5.3">
      <p>New features:</p>
      <ul>
        <li>
          Added <a href="config_misc.html#OuterTypeFilename">OuterTypeFilename</a>
          that checks that the outer type name and the file name match.
          For example, the class <code>Foo</code> must be in a file named
          <code>Foo.java</code>.
        </li>
        <li>
          Enhanced
          <a href="config_coding.html#PackageDeclaration">PackageDeclaration</a>
          to optionally check that the package name matches the name of the
          directory containing the file.
        </li>
        <li>
          Added <a href="config_coding.html#NestedForDepth">NestedForDepth</a>
          that restricts nested <code>for</code> blocks to a specified
          depth (default = 1). Thanks to Alexander Jesse for patch
          #1151673.
        </li>
        <li>
          Added <a href="config_sizes.html#MethodCount">MethodCount</a>
          that checks the number of methods declared in each type. This
          includes the number of each scope (<code>private</code>,
          <code>package</code>, <code>protected</code> and
          <code>public</code>) as well as an overall total. Thanks to
          Alexander Jesse for patch #1151669, which was the inspiration.
        </li>
        <li>
          Added <a href="config_coding.html#OneStatementPerLine">OneStatementPerLine</a>
          that checks there is only one statement per line. Thanks to
          Alexander Jesse for patch #1144994, which was the inspiration.
        </li>
        <li>
          Enhanced <a href="config_coding.html#MagicNumber">MagicNumber</a>
          to support the parameter <code>ignoreHashCodeMethod</code> to ignore
          magic numbers in <code>hashCode()</code> methods. Thanks to
          Daniel Solano Gómez for patch #3050788.
        </li>
        <li>
          Enhanced
          <a href="config_naming.html#AbstractClassName">AbstractClassName</a>
          to support checking that matching classes have the
          <code>abstract</code> modifier. Thanks to Danil Lopatin for
          patch #3043752.
        </li>
        <li>
          Enhanced the property types
          <a href="property_types.html#stringSet">stringSet</a> and
          <a href="property_types.html#intSet">intSet</a> to support being
          supplied multiple times to construct the equivalent of a comma
          separated list.
        </li>
        <li>
          Enhanced
          <a href="config_imports.html#AvoidStarImport">AvoidStarImport</a>
          to support the properties <code>allowClassImports</code> and
          <code>allowStaticMemberImports</code> for finer control over
          what is allowed. Thanks to Travis Schneeberger for patch
          #1939775.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          Fix <a href="config_javadoc.html#JavadocMethod">JavadocMethod</a>
          checking of <code>@throws</code> tags for methods that throw multiple
          non-runtime exceptions. Thanks to Daan Kets for patch #3039869.
        </li>
        <li>
          Fix
          <a href="config_design.html#HideUtilityClassConstructor">HideUtilityClassConstructor</a>
          to handle empty and inner classes. Thanks to Roman Ivanov for
          patch #3045720.
        </li>
      </ul>
      <p>Notes:</p>
      <ul>
        <li>
          Changed the default value of the property <code>logLoadErrors</code>
          to be <code>true</code> for the checks
          RedundantThrows and
          <a href="config_javadoc.html#JavadocMethod">JavadocMethod</a> to
          ensure consistent behaviour.
        </li>
      </ul>
    </section>
    <section name="Release 5.2">
      <p>New features:</p>
      <ul>
        <li>
          Enhanced <a href="config_coding.html#DeclarationOrder">DeclarationOrder</a>
          to support properties to ignore constructors, methods and modifiers.
          Thanks to Steve McKay for patch #2953941.
        </li>
        <li>
          Enhanced <a href="config_javadoc.html#WriteTag">WriteTag</a>
          to support empty tags, and constructor declarations.
          Thanks to Rolf Wojtech for patch #2724894.
        </li>
        <li>
          Added <a
          href="config_design.html#InnerTypeLast">InnerTypeLast</a> to
          check nested (internal) classes/interfaces are declared at the
          bottom of the class after all method and field declarations.
          Thanks to Ruslan Dyachenko for patch #3027391.
        </li>
        <li>
          Enhanced <a href="config_imports.html#ImportOrder">ImportOrder</a>
          to support using regular expressions for defining groups.
          Thanks to Martin von Gagern for patch #2782118.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
          Fixed <a href="config_imports.html#ImportOrder">ImportOrder</a>
          to have the sort behaviour as in release 5.0. (bug #2952881).
          Thanks to Steve McKay for patch #2953936.
        </li>
        <li>
          Fixed <a href="config_javadoc.html#JavadocStyle">JavadocStyle</a>
          not handling package declarations that have annotations.
          (bug #2911363)
        </li>
      </ul>
      <p>Notes:</p>
      <ul>
        <li>
          Converted the build system to
          <a href="http://maven.apache.org/">Maven</a>. The directory structure
          has been maintained for now, rather than adopting Maven's
          <a href="http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html">
            standard directory layout
         </a>. This will change once Maven has been <i>proven</i>.
        </li>
        <li>
          The Maven <code>&lt;groupId&gt;</code> changed to be
          <code>com.puppycrawl.tools</code> (from <code>checkstyle</code>).
        </li>
        <li>
          Introduced
          <a href="apidocs/com/puppycrawl/tools/checkstyle/api/FileText.html">
              FileText
         </a>
          to provide more flexibility on how the contents of a file are
          represented. This allows for Checkers that wish to operate on
          a single character sequence instead of a list of lines.
          Thanks to Martin von Gagern for patch #2783226.
        </li>
        <li>
          Updated third party dependencies to the latest versions. See
          <a href="dependencies.html">Project Dependencies</a> for details.
        </li>
        <li>
          Made the method EmptyBlockCheck.hasText(DetailAST) as
          <code>protected</code> so that it is accessible to subclasses.
          Requested by Steve McKay.
        </li>
      </ul>
    </section>

    <section name="Release 5.1">
      <p>New features:</p>
      <ul>
        <li>
          Enhanced <a href="config_imports.html#ImportOrder">ImportOrder</a>
          check to support wildcard ('*') groups.
          Thanks to Steve McKay for patch #2891032.
        </li>
        <li>
          Enhanced the naming checks
          <a href="config_naming.html">ConstantName</a>,
          <a href="config_naming.html">MemberName</a>,
          <a href="config_naming.html">MethodName</a>
          and <a href="config_naming.html">StaticVariableName</a>
          to utilise the access control tuning features
          of AbstractAccessControlNameCheck. Thanks to Steve McKay for patch
          #2893581.
        </li>
        <li>
          Improve ConfigurationLoader to use a InputSource. Thanks to
          Martin von Gagern for patch #2782627.
        </li>
        <li>
          Enhanced the
          <a href="config_imports.html#ImportControl">ImportControl</a> check
          to support regular expressions. Thanks to lbaeumer for patch
          #2937442.
        </li>
      </ul>
      <p>Bug fixes:</p>
      <ul>
        <li>
           Corrected build errors on javadoc generation.
           Thanks to Martin von Gagern for providing a patch (patch #2782630).
        </li>
        <li>
           Corrected javadoc in TokenTypes class for UNARY_PLUS and UNARY_MINUS
           members (bug #2745145).
        </li>
        <li>
           Corrected broken link in WhiteSpaceAround documentation
           (bug #2745287).
        </li>
        <li>
           Corrected pad policy documentation for MethodParamPad (bug #2775402).
        </li>
        <li>
           Added correct license information for referenced source files
           (bug #2778850).
        </li>
        <li>
           Updated documentation for writing checks (bug #2783451).
        </li>
        <li>
          Report unused Javadoc tags with no trailing whitespace(bug #2506962).
          Thanks to Ashlesha Patil for patch #2781021.
        </li>
        <li>
          Enhanced <a href="config_javadoc.html#JavadocType">JavadocType</a>
          check to handle and report on unknown Javadoc tags.
          The property allowUnknownTags can be set to ignore errors.
          (bug #2882261)
        </li>
      </ul>
      <p>Notes:</p>
      <ul>
        <li>
          <i>Updated dependencies</i>: Updated Google collections to version
          1.0.
        </li>
        <li>
          <i>Updated documentation</i>: Added links for 3rd party tools.
        </li>
      </ul>
    </section>
    <section name="Release 5.0">
      <p>
        Release 5.0 is not 100% backwardly compatible with release
        4.4. Most likely you will need to update your configuration
        file.
      </p>
      <p>The following checks were added since release 4.4:</p>
      <ul>
        <li><a href="config_annotation.html#AnnotationUseStyle">AnnotationUseStyle</a></li>
        <li><a href="config_annotation.html#MissingDeprecated">MissingDeprecated</a></li>
        <li><a href="config_annotation.html#MissingOverride">MissingOverride</a></li>
        <li><a href="config_annotation.html#PackageAnnotation">PackageAnnotation</a></li>
        <li><a href="config_annotation.html#SuppressWarnings">SuppressWarnings</a></li>
        <li><a href="config_coding.html#EqualsAvoidNull">EqualsAvoidNull</a></li>
        <li><a href="config_coding.html#NoClone">NoClone</a></li>
        <li><a href="config_coding.html#NoFinalizer">NoFinalizer</a></li>
        <li><a href="config_imports.html#AvoidStaticImport">AvoidStaticImport</a></li>
        <li><a href="config_javadoc.html#JavadocPackage">JavadocPackage</a></li>
        <li><a href="config_naming.html#ClassTypeParameterName">ClassTypeParameterName</a></li>
        <li><a href="config_naming.html#MethodTypeParameterName">MethodTypeParameterName</a></li>
        <li><a href="config_regexp.html#RegexpMultiline">RegexpMultiline</a></li>
        <li><a href="config_regexp.html#RegexpSingleline">RegexpSingleline</a></li>
        <li><a href="config_regexp.html#RegexpSinglelineJava">RegexpSinglelineJava</a></li>
        <li><a href="config_sizes.html#OuterTypeNumber">OuterTypeNumber</a></li>
        <li><a href="config_whitespace.html#FileTabCharacter">FileTabCharacter</a></li>
        <li><a href="config_whitespace.html#GenericWhitespace">GenericWhitespace</a></li>
      </ul>
      <p>
        Since release 4.4 the following checks were changed from a Check
        to a FileSetCheck:
      </p>
      <ul>
        <li><a href="config_header.html#Header">Header</a></li>
        <li><a href="config_header.html#RegexpHeader">RegexpHeader</a></li>
        <li><a href="config_sizes.html#FileLength">FileLength</a></li>
      </ul>
      <p>
        This means that the checks above must not be declared under the
        TreeWalker module anymore. For example, the following Checkstyle
        4.4 configuration file:
      </p>
      <source>
&lt;module name=&quot;Checker&quot;&gt;
  &lt;module name=&quot;TreeWalker&quot;&gt;
    &lt;module name=&quot;Header&quot;&gt;
      &lt;property name=&quot;headerFile&quot; value=&quot;${checkstyle.header.file}&quot;/&gt;
    &lt;/module&gt;
  &lt;/module&gt;
&lt;/module&gt;
      </source>

      <p>becomes the following Checkstyle 5.0 configuration file:</p>
      <source>
&lt;module name=&quot;Checker&quot;&gt;
  &lt;module name=&quot;Header&quot;&gt;
    &lt;property name=&quot;headerFile&quot; value=&quot;${checkstyle.header.file}&quot;/&gt;
    &lt;property name=&quot;fileExtensions&quot; value=&quot;java&quot;/&gt;
  &lt;/module&gt;
&lt;/module&gt;
      </source>
      <p>The following checks were removed since release 4.4:</p>
      <ul>
        <li>
          GenericIllegalRegexpCheck - replaced with <a
          href="config_regexp.html#RegexpMultiline">RegexpMultiline</a>
          and <a
          href="config_regexp.html#RegexpSingleline">RegexpSingleline</a>
          and <a
          href="config_regexp.html#RegexpSinglelineJava">RegexpSinglelineJava</a>.
        </li>
        <li>
          RequiredRegexpCheck - replaced with <a
          href="config_regexp.html#RegexpMultiline">RegexpMultiline</a>
          and <a
          href="config_regexp.html#RegexpSingleline">RegexpSingleline</a>
          and <a
          href="config_regexp.html#RegexpSinglelineJava">RegexpSinglelineJava</a>.
        </li>
        <li>
          CrossLanguageRegexpHeaderCheck - replaced with
          <a href="config_header.html#RegexpHeader">RegexpHeader</a>.
        </li>
        <li>
          PackageHtmlCheck - replaced with
          <a href="config_javadoc.html#JavadocPackage">JavadocPackage</a>.
        </li>
        <li>All the J2EE checks.</li>
      </ul>
      <p>New Features since release 5.0 Beta 2:</p>
      <ul>
        <li>
          New Annotation checks
          <a href="config_annotation.html#AnnotationUseStyle">AnnotationUseStyle</a>
          <a href="config_annotation.html#MissingDeprecated">MissingDeprecated</a>
          <a href="config_annotation.html#MissingOverride">MissingOverride</a>
          <a href="config_annotation.html#PackageAnnotation">PackageAnnotation</a>
          <a href="config_annotation.html#SuppressWarnings">SuppressWarnings</a>
          . Big thanks to Travis Schneeberger who is now a committer on the
          project.
        </li>
      </ul>
      <p>Fixed Bugs since release 5.0 Beta 2:</p>
      <ul>
        <li>
          <a href="config_coding.html#RequireThis">RequireThis</a>
          reported a violation when using an annotation
          with a member name that is the same as a member name in the enclosing
          class the annotation was used in (bug #2123003).
        </li>
      </ul>
    </section>

    <section name="Release 5.0 Beta 2">
      <p>
        Major change to FileSetCheck architecture to move the
        functionality of open/reporting of files into Checker. The
        advantages are:
      </p>
      <ul>
        <li>
          Reduces the logic required in each implementation of FileSetCheck
        </li>
        <li>
          Reduces, but not eliminates, the number of times a file is
          reported as being audited.
        </li>
        <li>
          Reduces the amount of times a file needs to be read in from
          the file system.
        </li>
      </ul>
      <p>
        The motivation for this change is to convert checks that are
        language neutral in nature, to be based on FileSetCheck. This
        allows the checks to be used for other languages apart from
        Java. As a practical example, it is possible to ensure that JSP
        and XML files do not contain tabs.
      </p>
      <p>New Features:</p>
      <ul>
        <li>
          Added the option <i>charset</i> to the
          <a href="config_header.html">header checks</a> to allow
          controlling the encoding of the header file (rfe 1952641).
        </li>
        <li>
          New check
          <a href="config_sizes.html#OuterTypeNumber">OuterTypeNumber</a>
          for enforcing the maximum number of outer types per file. Inspired
          by patch #1145023 from Alexander Jesse.
        </li>
        <li>
          Added the option <i>sumTokenCounts</i> to the <a
          href="config_misc.html#DescendantToken">DescendantToken</a> to
          allow for even more powerful checks. For example, detect
          statements like <code>this == null</code>.
        </li>
        <li>
          Add new options to the <a
          href="config_imports.html#ImportOrder">ImportOrderCheck</a>
          to make it more flexible. Thanks to David Didier for providing
          patch #1854213.
        </li>
        <li>
          New check <a
          href="config_whitespace.html#FileTabCharacter">FileTabCharacter</a>
          for ensuring that any files does not contain a tab
          character. It replaces <i>TabCharacterCheck</i> which was
          restricted to Java files.
        </li>
        <li>
          Changed <a href="config_sizes.html#FileLength">FileLength</a>
          check to be a FileSetCheck.
        </li>
        <li>
          Changed <a
          href="config_header.html#RegexpHeader">RegexpHeader</a> and <a
          href="config_header.html#Header">Header</a> to be a
          FileSetCheck. Removed CrossLanguageRegexpHeader as a result.
        </li>
        <li>
          Enhanced <a
          href="config_javadoc.html#JavadocStyle">JavadocStyle</a> to
          check for allowed HTML tags. Thanks to Nicolas Dordet for
          providing patch #2214251.
        </li>
        <li>
          Enhanced <a
          href="config_javadoc.html#JavadocMethod">JavadocMethod</a> to
          be more restrictive on where <code>{@inheritDoc}</code> can be
          used. Also enhanced <a
          href="config_javadoc.html#JavadocPackage">JavadocPackage</a>
          to ensure a <code>package-info.java</code> file contains a
          comment. Thanks to Travis Schneeberger for providing patch
          #2294029.
        </li>
        <li>
          Added the <a href="config.html#Filters">SuppressWithNearbyCommentFilter</a>
          filter that uses nearby comments to suppress audit events. Thanks
          to Mick Killianey for providing patch #2354424.
        </li>
        <li>
          Added the new checks <a
          href="config_regexp.html#RegexpMultiline">RegexpMultiline</a>
          <a
          href="config_regexp.html#RegexpSingleline">RegexpSingleline</a>
          <a
          href="config_regexp.html#RegexpSinglelineJava">RegexpSinglelineJava</a>.
        </li>
      </ul>

      <p>Fixed Bugs:</p>
      <ul>
        <li>
          The NCSS complexity checker reported an incorrect fileMax value
          (bug #2161419).
        </li>

        <li>
          Checkstyle command-line no longer reports a usage error if the
          user specifies a directory with the <i>-r</i> option that does
          not contain any files. Thanks to Florian for patch #2151706.
        </li>
        <li>
          Fixed the <a href="config_blocks.html#LeftCurly">LeftCurly</a> check
          to ignore leading annotations. Thanks to Tim Carpenter for patch
          #2506439.
        </li>
      </ul>
    </section>

    <section name="Release 5.0 Beta 1">
      <p>
        The 5.x release is developed using Java 5 and requires a Java 5
        platform to run. If you need run a Java 1.4 or earlier, then use
        a Checkstyle 4.x release. As such, features for earlier versions
        of Java will be dropped over time.
      </p>

      <p>New Features:</p>
      <ul>
        <li>
          New check <a
          href="config_coding.html#NoFinalizer">NoFinalizer</a>
          for ensuring that a class does not define a finalize() method.
          Thanks to Feng Qian and Steve McKay for providing patch #1892273.
        </li>
        <li>
          New check <a
          href="config_whitespace.html#GenericWhitespace">GenericWhitespace</a>
          for ensuring the whitespace around the Generic tokens &lt; and
          &gt; are correct to the <i>typical</i> convention.
        </li>
        <li>
          New check <a
          href="config_javadoc.html#JavadocPackage">JavadocPackage</a>
          for ensuring that each Java package has a Javadoc
          comment. Replaces the check PackageHtml which has been
          removed. (Bug 1228207)
        </li>
        <li>
          Enhanced the <a
          href="config_javadoc.html#JavadocMethod">JavadocMethod</a>
          check to not require Javadoc if the method is tagged with the
          <code>@Override</code> annotation.
        </li>
        <li>
          New check <a
          href="config_coding.html#EqualsAvoidNull">EqualsAvoidNull</a>
          for ensuring that String literals is on the left side of an
          <code>equals()</code> comparison.  Thanks to
          Travis Schneeberger for providing patch #1895152.
        </li>
        <li>
          Overhaul of how the package names to be prefixed to module
          names are determined. See the <a
          href="config.html#Packages">documentation</a> for full
          details. This has meant removing a supported parameter to the
          ANT task and the Command line. Thanks to Lars Koedderitzsch
          for patch #1914806.
        </li>
        <li>
          New check <a
          href="config_imports.html#AvoidStaticImport">AvoidStaticImport</a>
          for ensuring there are no static import statements. Thanks to
          Travis Schneeberger for providing patch #1940611.
        </li>
        <li>
          Enhanced the <a href="config_naming.html">MethodName</a> check
          to detect when a method name is the same as the residing class
          name. Thanks to Travis Schneeberger for providing patch
          #1892364.
        </li>
        <li>
          New check <a href="config_coding.html#NoClone">NoClone</a> for
          ensuring a class does not override the <code>clone</code> method from
          the <code>Object</code> class. Thanks to Travis
          Schneeberger for providing patch #1947417.
        </li>
        <li>
          New checks <a href="config_naming.html#ClassTypeParameterName">
          ClassTypeParameterName</a> and
          <a href="config_naming.html#MethodTypeParameterName">
          MethodTypeParameterName</a>
          for type name formats. Thanks to Travis Schneeberger for providing
          patch #1956561.
        </li>
        <li>
          Overhaul of how <code>AbstractOptionCheck</code> works.
          It now requires that the option type is a Java 5 Enum and hence the
          <code>AbstractOption</code> class has been removed.
        </li>
        <li>
          Provide support in the module configuration to allow for custom
          messages that override the default message. This allows for
          messages to be easily overridden.
          See <a href="config.html#Custom_messages">Custom Messages</a> for
          more information. Thanks to Lars Koedderitzsch for providing patch
          #1917420.
        </li>
      </ul>

      <p>Fixed Bugs:</p>
      <ul>
        <li>
          Stop the WhitespaceAroundCheck from checking the Generic
          tokens &lt; and &gt;.
        </li>
        <li>
          Fixed bug with incorrectly flagging an import as being
          unused. Bug 1860424, but as a consequence reintroduced bug
          1098126. It is a catch-22 that both bugs can be solved with
          the current architecture.
        </li>
        <li>
          Fixed bug #1649020 where generic parameters for methods
          recognized as HTML tags. Used patch #1936389 from Travis
          Schneeberger.
        </li>
      </ul>

      <p>Notes:</p>
      <ul>
        <li>
          <i>Retired</i> the J2EE Checks. If you are using Java 5, then you
          really should be using
          <a href="http://www.oracle.com/technetwork/java/javaee/overview/index.html">Java EE</a>. If you need
          these checks, then use a Checkstyle 4.x release.
        </li>
        <li>
          Applied patch #1892253 to expand access controls to other naming
          checks.
        </li>
        <li>
          Applied patch #1993103 to make the format of end of sentence
          configurable in the
          <a href="config_javadoc.html#JavadocStyle">JavadocStyle</a>
          check.
        </li>
        <li>
          <i>Updated dependencies</i>: Removed commons-collections; added Google collections
          (google-collect-snapshot-20080321.jar); upgraded commons-cli to version 1.1.
        </li>
        <li>
          Changed the classes <code>Scope</code> and
          <code>SeverityLevel</code> to be based on the Java 5
          <code>Enum</code> class. Used patch #2004776 from Travis
          Schneeberger.
        </li>
      </ul>
    </section>

    <section name="Release 4.4">
      <p>Fixed Bugs:</p>

      <ul>
        <li>
          checkstyle-all.jar contained some classes from jakarta
          commons-collections twice. (bug 1630361)
        </li>
        <li>
          Multiple string literal check now ignores annotations by
          default (bug 1560940).  It is possible to retain the old
          behaviour by setting the new check property
          ignoreOccurrenceContext to an empty value.
        </li>
        <li>
          The calculated value of NPath complexity was subject to
          integer overflow, so complex code was not always flagged (bug
          1654769).
        </li>
        <li>
          Fixed misleading documentation for BooleanExpressionComplexity
          check (bug 1579227).
        </li>
        <li>
          Fixed Java parser error for array brackets in wildcard generic
          types (bug 1394014).  Thanks to Paul Constantinides for
          submitting the fix (patch 1422247).
        </li>
        <li>
          Fixed false alarm in HideUtilityClassConstructor check when class
          has only static methods but contains non static fields (bug 1762702).
        </li>
      </ul>

      <p>New features:</p>

      <ul>
        <li>
          Allow to control the operator token types in
          BooleanExpressionComplexity check (in response to bug
          1579227).
        </li>
        <li>
          Added an entry for <tt>Checkstyle-IDEA</tt> on the home page.
        </li>
        <li>
          Set the <tt>failureProperty</tt> with a meaningful message
          (feature request 1725475).
        </li>
        <li>
          Add a URL option for ImportControl check. Thanks to Benjamin
          Lerman for the patch 1724683.
        </li>
        <li>
          Moved source control over to Subversion.
        </li>
      </ul>
    </section>

    <section name="Release 4.3">
      <p>Fixed Bugs:</p>

      <ul>
        <li>
          The StrictDuplicateCode check didn't report correct results when
          multiple duplicate code regions were overlapping. (bug 1564465)
        </li>
        <li>
          Fixed NPE in FallThrough check (bug 1472228)
        </li>
        <li>
          Fixed typo in Command Line example (bug 1464595)
        </li>
        <li>
          RegexpHeader check now correctly report problematic line in
          file with regexps for header (bug 1455575)
        </li>
        <li>
          Fixed small problem in usage checks (patch 1498920).  Thanks
          to Chris Povirk (cpovirk) for submitting the patch.
        </li>
        <li>
          Fixed incorrect French translation (bug 1611403). Thanks to
          Fabien Bergeret for providing the correct value.
        </li>
      </ul>

      <p>New features:</p>

      <ul>
        <li>
          Major performance improvements in the StrictDuplicateCode check,
          especially for large projects. Also, false alarms are no longer
          possible.
        </li>
        <li>
          New CrossLanguageRegexpHeader check that allows checking file headers
          for other languages than Java.
        </li>
        <li>
          Applied patch 1586411 from Dennis Lundberg (dennislundberg) to
          add Maven POM files to the build.
        </li>
      </ul>
    </section>

    <section name="Release 4.2">
      <p>New features:</p>

      <ul>
        <li>
          NoWhitespaceAfter check now accepts TYPECAST token to check is
          there is no whitespace after typecast. (rfe 1248106).
        </li>
        <li>
          IllegalType can be configured to accept some abstract classes
          which matches to regexp of illegal type names (property
          legalAbstractClassNames, rfe 953266).  Thanks to Paul Guyot
          (pguyot) for submitting patch.
        </li>
        <li>
          TrailingComment now can be configured to accept some trailing
          comments (such as NOI18N) (property legalComment, rfe
          1385344).
        </li>
        <li>
          Added WriteTag check which outputs a JavaDoc tag as
          information (patch 902110) Thanks to Daniel Grenner (dgrenner)
          for contribution.
        </li>
        <li>
          Support for suppressing audit events based on an identifier
          that is assigned to individual modules/checks. This allows for
          suppressing at a finer level than the check class
          name. See <a href="config.html#Filters">SuppressionFilter</a>
          documentation for more.
        </li>

        <li>
          Added the style sheet checkstyle-frames.xsl, thanks to Paul
          King. (Bug 1385095).
        </li>

        <li>
          Applied patch (1505376) by Clint Stotesbery to support the
          suppressLoadErrors property for AbstractTypeAwareCheck (RFE
          1491630).
        </li>

        <li>
          Upgraded to ANTLR 2.7.6.
        </li>

        <li>
          GUI now displays a TextArea with the contents of the file
          parsed. Based on patch from sermojohn (RFE 1499180).
        </li>
      </ul>

      <p>Fixed Bugs:</p>

      <ul>
        <li>
          First attempt to fix 1000092 (RightCurlyCheck misbehaves for
          LIT_CATCH).  The check has been rewritten to check rcurly
          after finally and else.  Current behavior is incompatible
          with previous one.
        </li>
        <li>
          Fixed problem in type aware checks with loading
          inner-classes which were referenced as
          &lt;outer_class_name&gt;.&lt;inner_class_name&gt; (bug
          1379666, modules JavadocMethod and RedundantThrows).
        </li>
        <li>
          Fix UTF-8 encoding error in XMLLogger. (bug 1369589).
        </li>
        <li>
          The new property logLoadErrors of the JavaDocMethod check
          now allows controlling the behaviour when checkstyle cannot
          load a class that is referenced in javadoc (bug 1422462).
        </li>
        <li>
          Tighten up the allowed use of the {@inheritDoc} tag.
        </li>
        <li>
          Stop creating duplicate regular expression patterns.
        </li>
      </ul>
    </section>

    <section name="Release 4.1">
      <p>Fixed Bugs:</p>

      <ul>
        <li>
          Documentation for JavadocMethod check corrected to indicate
          that after fix for 1290379 javadoc which contains only @see
          tag is not valid any more (bug 1369615)
        </li>
        <li>
          Fixed StackOverflowError in GenericIllegalRegexp check
          which may occur if ignoreComments is true and there is an
          illegal match in comment at the end of line. (bug 1371588)
        </li>
        <li>
          InnerAssignment now ignores assignments in annotations. (bug
          1369425)
        </li>
        <li>
          Applied patch from Ralf (rakus) to remove javadoc's
          complaints. (patch 1352862)
        </li>
        <li>
          Fixed StringIndexOutOfBoundsException which MethodParamPad may
          throws if someone tries to create object of generic class
          (with any params) (bug 1374792).
        </li>
        <li>
          Added information to the manifest file. (bug 1380322).
        </li>
      </ul>
    </section>

    <section name="Release 4.0">
      <p>New features:</p>

      <ul>
        <li>
          Applied patch 1344344 by sjq to provide the new
          <a href="http://checkstyle.sourceforge.net/config_misc.html#Regexp">Regexp</a> check that can
          provide the functionality of the following
          checks: <a
          href="config_header.html#RegexpHeader">RegexpHeader</a>
        </li>
        <li>
          Added support for property <i>ignoreStringsRegexp</i> to
          <i>MultipleStringLiterals</i> check. Patch 1254918 from taab.
        </li>
        <li>
          Added Spanish translation of messages. Thanks to Ricardo Mones
          (patch 1250329).
        </li>
        <li>
          Made the Class Loader used to load infrastructure classes and
          resources come from <code>Thread.currentThread()
          .getContextClassLoader()</code>. Done as a result of patch
          1273903 from Lars Koedderitzsch.
        </li>
        <li>
          Added patch The LocalizedMessage already gets the Class of the
          check that triggers the message (to output the name of the
          check). Instead of storing just the name of this class, store
          the class itself. With this the name can be retrieved and the
          classloader of this class can be used to load the correct
          resource bundle. Patch 1309516 from Ralf (rakus).
        </li>
        <li>
          FallThrough check now can check last case group (property
          checkLastCaseGroup, bug 1245942).
        </li>
        <li>
          Applied patch 906531 (WhitespaceAround allows empty
          method/ctor bodies.) Thanks to Eric Roe (module
          WhitespaceAround, properties allowEmptyCtors and
          allowEmptyMethods).
        </li>
        <li>
          FallThrough check can be configured to ignore fall-throughs
          if there is a relief comment, thanks to Ralf (aka rakus)
          for a great patch (rfe 1345691, patch 1348873)
        </li>
      </ul>

      <p>Fixed Bugs:</p>

      <ul>
        <li>
          Fixed encoding problems when parsing XML because was using
          FileReader instead of FileInputStream. Bug 1320132.
        </li>
        <li>
          The InnerAssignment check didn't find all instances of inner
          assignments. Bug 1195047.
        </li>
        <li>
          Fixed typo in grammar (bug 1335088)
        </li>
        <li>
          Fixed ParenPad check problem which was caused by one of
          recent grammar change (one which was about
          (SUPER_)CTOR_CALL) (bug 1322879).
        </li>
        <li>
          Fixed bug in logic JavadocStyle check uses to get
          main-section of javadoc (bug 1291847).
        </li>
        <li>
          Three more fixes for Indentation check (bugs 1251988,
          1260079, 1336737).
        </li>
        <li>
          Fixed problem in Comment.hasIntersectionWithComment() (patch
          1339523 from Richard Schulte).
        </li>
        <li>
          Now javadoc method should not contain only @see tag (but
          could contain only {@ingeritDoc} tag) (bug 1290379, module
          JavadocMethod)
        </li>
      </ul>

      <p>Other improvements:</p>

      <ul>
        <li>
          Applied patch 1292684 from Maarten Coene to fix the generated
          HTML reports that are not correct if you include the
          TreeWalker and the StrictDuplicateCode modules in the same
          configuration. Patch effects checkstyle-noframes-sorted.xsl.
        </li>
        <li>
          Applied patch 1340300 from David Dodini to update bcel
          checks to be compilable with current Checkstyle's API.
        </li>
        <li>
          Added antlib.xml to support new cool feature of Ant.
        </li>
        <li>
          Applied patch 1386388 to enable ConfigurationLoader to load
          from InputStream.
        </li>
      </ul>

    </section>

    <section name="Release 4.0 Beta 6">
      <p>New features:</p>

      <ul>
        <li>One more change for grammar: now CTOR_CALL and
        SUPER_CTOR_CALL nodes represents "this" and "super" keywords
        from these statements.</li>
      </ul>

      <p>Fixed Bugs:</p>

      <ul>
        <li>Removed all reference to the usage checks (bug
        1256662).</li>

        <li>RequireThis now handles inner enums better (bug 1257599)</li>

        <li>Fixed package name for modifiers checks in documentation
        (bug 1275988)</li>

        <li>MagicNumber allows use numeric constants in enum constant
        definition (bug 1284682)</li>

        <li>Fixed i18n problems in ArrayTypeStyle,
        HideUtilityClassConstructor and AvoidInlineConditionals(bug
        1262825)</li>

      </ul>

      <p>Other improvements:</p>

      <ul>
        <li>TBD</li>
      </ul>

    </section>

    <section name="Release 4.0 Beta 5">
      <p>New features:</p>

      <ul>
        <li>Added useFile property of ant task (patch 916971)</li>

        <li>
          Documented new tokens which is checked by WhitespaceAround
          (bug 1233425)
        </li>

        <li>
          Added patch (ID 1193251) to suppress processing of checks with
          'ignore' severity. From Lars Koedderitzsch.
        </li>

        <li>
          Added IllegalThrowsCheck to detect illegal throw declarations.
        </li>

        <li>
          Added ImportControlCheck to controls what packages can be
          imported in each package. Useful for ensuring that application
          layering is not violated.
        </li>
      </ul>

      <p>Fixed Bugs:</p>

      <ul>
        <li>HiddenField can be configured to ignore parameters of
        abstract methods (property ignoreAbstractMethods, bug
        1084512)</li>

        <li>Applied patch 1079192 (thanks to Dave Brosius)</li>

        <li>Two more bugs fixed in type aware checks (RedundantThrows
        and JavadocMethod checks) (bug 1168408 and 1220726)</li>

        <li>Applied patch 1045127 (thanks to Paul Constantinides)</li>

        <li>TypecastParenPad and ParenPad are now smarter in detecting
        if paren is part of typecast (bug 1217798)</li>

        <li>LocalFinalVariable now also checks catch parameters (bug
        1223290)</li>

        <li>Applied patch 1061458, hope this helps users who use
        checkstyle with JRockit (thank to Ville Skytta for
        contribution)</li>

        <li>Changed way how to IndentationCheck handles fields in
        classes and operator new (bug 1193848, 1232822)</li>

        <li>Fixed problem with cache file (patch 1012389) thanks to
        Dave Wood.</li>

        <li>Fixed example for FinalLocalVariable snf the check itself
        (bug 1241722)</li>

        <li>Fixed implementation of DetailAST so getPreviousSibling()
        works for all nodes in AST tree (bug 1244994)</li>

        <li>Now type-aware check know more about generics (bug 1249707,
        modules: RedundantThrows and JavadocMethodCheck)</li>

      </ul>

      <p>Other improvements:</p>

      <ul>
        <li>
          Introduced the EMMA code coverage tool. A report is produced
          as a result of running the unit tests.
        </li>

        <li>
          Retired the usage checks to the contrib directory. If there is
          interest in the future they may be promoted back into the
          optional set of checks.
        </li>
      </ul>
    </section>

    <section name="Release 4.0 Beta 4">
      <p>Fixed Bugs:</p>

      <ul>
        <li>Fix critical bug in the grammar (bug 1216844)</li>
      </ul>
    </section>

    <section name="Release 4.0 Beta 3">
      <p>Fixed Bugs:</p>

      <ul>
          <li>DesignForExtension check skips enums now (they are final
          :). (bug# 1194470)</li>

          <li>Indentation check now works better with enums and
          for-each statements (bugs 1193850 and 1193855)</li>

          <li>Corrected calculation of Cyclomatic complexity metric
          (bug 1203536, module CyclomaticComplexity)</li>

          <li>SuppressionCommentFilter now silently does nothing if
          there is no FileContentsHolder (bug 1183749)</li>

          <li>Java Parser now understands Java 5 hex float syntax
          (bug 1195818)</li>
      </ul>

      <p>Other improvements:</p>

      <ul>
          <li>Improved performance of reading Java files
          (patch 1214386, contributed by Lars Koedderitzsch)</li>

      </ul>

      <p>Dependencies:</p>

      <ul>
          <li>Since Checkstyle now requires Java 1.4, it does not need
          Jakarta Regexp library any more and uses java.util.regex
          package from J2SE instead. The regular expression specifications
          of these libraries use a slightly different syntax in some
          corner cases, e.g. for posix character classes. We expect that
          these differences are not relevant for the majority of checkstyle
          users, but please check your configuration.</li>

      </ul>

    </section>

    <section name="Release 4.0 Beta 2">

      <p>Dependencies:</p>

      <ul>
          <li>Checkstyle now requires Java 1.4, running Checkstyle inside
          a Java 1.3 VM is no longer supported.</li>

      </ul>

      <p>Fixed Bugs:</p>

      <ul>
          <li>The Ant task now always prints a summary line like
          'Running Checkstyle 4.0 on 339 files' (bug 1099573).</li>

          <li>Added missing documentation for the fileExtensions
          property of the NewlineAtEndOfFile check (bug 1174751).</li>

          <li>Fixed bug #1098126 in UnusedImport check.</li>

          <li>Fixed bug #1185722 (DeclarationCollector.leaveToken unbalanced
          with visitToken)</li>

          <li>Fixed NPE in AbstractUsageCheck when we process an empty
          file (bug 1165855)</li>

      </ul>

    </section>

    <section name="Release 4.0 Beta 1">

      <p>New features:</p>

      <ul>

        <li>Introduced preliminary support (beta quality) for the Java 5
        language. Previous versions of Java are still supported so this
        release should be a drop in replacement for the 3.5 release. The
        reason for the beta release is to solicit feedback on the Java 5
        support.</li>

        <li>Documentation contains an alphabetically sorted
            list of all available checks.</li>

        <li>Checker.getBasedir() is public now (rfe 1023004)</li>

        <li>JavadocMethod check now can be configured to skip missed javadoc
        (rfe 1060634)</li>

        <li>Some clarifications on scope property of javadoc checks added
        (rfe 1009201)</li>

        <li>UnusedPrivateMethod check now can be configured to ignore
        serialization-related methods (readObject(), writeObject(),
        readResolve() and writeReplace()) (rfe 1036387)</li>

        <li>Added support for the property
        <code>allowMissingPropertyJavadoc </code> on the <a
        href="config_javadoc.html#JavadocMethod">JavadocMethod</a>
        check.</li>

      </ul>

      <p>Resolved bugs: </p>

      <ul>

        <li>Fix bug with suppression filtering. (bug 1080343).</li>

        <li>Improved French message translations
        (patch 1097980 by Olivier Parent).</li>

        <li>Fixed typo in SuppressionCommentFilter which caused bug 1084654</li>

        <li>Fixed 1048226 (Runtime problems of Checks are logged to checkstyle
        audit), now checkstyle will fail if it cannot load class for exception
        from throws clause of javadoc (modules RedundantThrows and
        JavadocMethod)</li>

        <li>Fixed French translation, patch from Paul Guyot (bugs 1090381 and
        1100946)</li>

        <li>Fixed problem with exception's javadoc checks(bug 1100193, module
        JavadocMethod)</li>

        <li>Fixed two more problems in Indentation check (bug 1089128)</li>

        <li>ConstantName check now exclude serialPersistentFields from the
        check (bug 1097285)</li>

        <li>One more problem with SuppressionCommentFilter fixed (bug
        1061459)</li>

        <li>format property of IllegalType check documented (bug 1047449)</li>

        <li>ModifiedControlVariable check changed to work with for-each
        correctly (1101851)</li>

        <li>Annotations and enums are classes too and should be treated so by
        ClassFanOutComplexity checks (bug 1109205)</li>

        <li>Two more annotation-related problems (module Indentation, bug
        1109214 and module UnnecessaryParentheses, bug 1109238)</li>

      </ul>

      <p>Other changes:</p>

      <ul>

        <li>Added new check packages and moved check implementations.
            Users who maintain their own packagelist must adapt to these changes.</li>

      </ul>

    </section>

    <section name="Release 3.5">

      <p>New features:</p>
      <ul>

        <li>Added attributes maxErrors and maxWarnings to Ant task to allow
        finetuning of failure behaviour (request 783538).</li>

        <li>Added check that checks for a required regexp, contributed by
        Daniel Grenner (module RequiredRegexp, request 606115, patch
        902189).</li>

        <li>Added check for the ncss metric. (module JavaNCSS, patch
        920820)</li>

        <li>Added check that checks for multiple string literals, contributed
        by Daniel Grenner (module MultipleStringLiterals, patch 929882).</li>

        <li>Added check that checks for a modified control variable in a for loop,
        contributed by Daniel Grenner
        (module ModifiedControlVariable, patch 927680).</li>

        <li>Added example of how to configure the XML parser factory for
        Checkstyle, and how to support XInclude processing
        (contrib/examples/XInclude, request 905169).</li>

        <li>Added example of an ant build file and stylesheet for generation
        of an HTML error report with links to source code.
        </li>

        <li>Added filter that suppresses audit events according to source file
        comments, contributed by Mike McMahon (module
        SuppressionCommentFilter, requests 732196 and 931327).</li>

        <li>Better information for unexpected char (request 666188).</li>

        <li>Added charset property to TreeWalker and StrictDuplicateCode check
        (addresses bug 975346).  </li>

        <li>French message translations, contributed by Pierre Dittgen
        (request 978916).</li>

        <li>DataAbstractionCoupling reports coupling classes, contributed by
        Benoit Xhenseval (request 990055).</li>

        <li>FinalLocalVariable ignores parameters of interface methods and
        abstract methods.  (request 993922 and bug 1002849).</li>

        <li>Header and RegexpHeader checks allow header specification directly
        in the checkstyle configuration file, not only in an external file
        (request 1041590).</li>

        <li>com.puppycrawl.tools.checkstyle.gui.Main accepts an optional file
        name in the command line.  (request 1000102).</li>

      </ul>

      <p>Resolved bugs: </p>

      <ul>

        <li>False alarms from UnusedPrivateMethodCheck for anonymous inner
        class parameter.  (bug 950548).</li>

        <li>Fixed bug in handling imports in RequireThis(bug 952508)</li>

        <li>JUnitTestCaseCheck erroneously mentions tearDown instead of
        setUp. (bug 955925, patch by Paul Guyot)</li>

        <li>JavadocTypeCheck does not find a tag on the first comment
        line. (patch 959995, patch by Michael Tamm)</li>

        <li>StrictDuplicateCodeCheck did not find duplicates within the same
        file.</li>

        <li>Unexpected char (bug 975346).</li>

        <li>MagicNumber check overly aggressive (reported on user mailing
        list).</li>

        <li>Documentation error for naming convention checks (bug
        987503).</li>

        <li>FinalParametersCheck checks parameters of abstract methods. (bug
        1002849).</li>

        <li>Bug in ClassResolver where it was mismatching imports - example
        would match SecurityDataException when looking for DataException. Bug
        was visible in RedundantThrows check (no known bug).</li>

        <li>Fixed HiddenFieldCheck to correctly handle static inner classes
        (bug 1032426).</li>

        <li>Fixed misspelling of variable (patch 1032618 contributed by Paul
        Wagland).</li>

        <li>Fixed ClassResolver to handle exceptions which are inner for
        current class (bug 945149).</li>

        <li>Fixed ClassResolver to handle fully-qualified inner classes (bug
        1037667).</li>

        <li>Fixed 1033166 (Indent module specifies two indent levels for one
        line)</li>

        <li>Fixed false alarms in RequireThis check (bug 952508)</li>

      </ul>

      <p>API changes:</p>
      <ul>

          <li>Added new class SeverityLevelCounter.</li>

      </ul>
    </section>

    <section name="Release 3.4">

      <p>
        New features:
      </p>

      <ul>

        <li>Added a 'version' attribute to the 'checkstyle' element in the XML
        output document (request 853128).</li>

        <li>FinalParameter can be applied to catch blocks (request
        848820).</li>

        <li>Improved German translation, contributed by Oliver Fischer (patch
        862911).</li>

        <li>Added stylesheet to translate XML output into comma separated
        values format (contrib/checkstyle-csv.xsl, request 764153).</li>

        <li>Added BooleanExpressionComplexity check from Simon Harris (request
        750760)</li>

        <li>Added ClassDataAbstractionCoupling check
        from Simon Harris (request 750758)</li>

        <li>Added ClassFanOutComplexity check from
        Simon Harris (request 750759)</li>

        <li>Added NPathComplexity check from Simon
        Harris (request 750757)</li>

        <li>Added several more log() methods to
        AbstractViolationReporter. (request 843551)</li>

        <li>Added check to ensure that default is a last
        label in the switch statement.(module DefaultComesLast,
        request 754486 )</li>

        <li>Added check to ensure that all classes
        define constructor. (module MissingCtor, request
        696129)</li>

        <li>Added check to warn on fall-through in case
        with code not followed by break. (module FallThrough,
        request 754438)</li>

        <li>Added check to ensure that every variable
        is declared in its own statement and on its own line (module
        MultipleVariableDeclarations, requests 639233, 753858,
        844705)</li>

        <li>Added check to ensure that references to
        non-static fields and methods should be qualified.
        (module RequireThis, contributed by Stephen Bloch, requests
        755550, 696295).</li>

        <li>Added multiLines property to regexpCheck
        (request 597676)</li>

        <li>Added check for the padding between the
        identifier of a method definition, constructor definition,
        method call, or constructor invocation;
        and the left parenthesis of the parameter list.  (module
        MethodParamPad, request 843254)</li>

        <li>Added check to forbid endline
        comments. (module TrailingComment, request 744970)</li>

        <li>Added applyTo(Public|Protected|Package|Private)
        properties to check MemberName. (request 695935)</li>

        <li>Added check to verify padding in empty for loop
        initializers. (module EmptyForInitializerPad, part of fix for
        bug 895072)</li>

        <li>Added checkEmptyJavadoc property to JavadocStyle
        check, contributed by Daniel Grenner (request 849056, patch 903597)
        </li>

        <li>Added format property to ReturnCount check
        to configure ignored method names (request 904437)</li>

        <li>Added attribute 'default' to configuration
        &lt;property&gt; tags, improves usability for centralized
        configuration files. This change triggered a new version of the
        configuration DTD. Your old configuration files will still work,
        but if you want to use the new 'default' attribute you need to
        upgrade your configuration file to DTD version 1.2.</li>

        <li>Ignore comments in GenericIllegalRegexp check,
        contributed by Daniel Grenner (request 680988, patch 902109).</li>

        <li>UnnecessaryParentheses check contributed by
        Eric Roe (patch 911086, request 634834)</li>

        <li>Added ignoreNonLocal property to UnusedParameter
        check to check only private and static methods (request 787683)</li>

        <li>Added excludeScope property to
        Javadoc(Method|Variable|Type|Style) checks (request
        846108)</li>

      </ul>

      <p> Resolved bugs: </p>

      <ul>

        <li>Incorrect documentation of cmdline options
        (bug 865610).</li>

        <li>FinalParameter now reports column of start of
        parameter declaration. (bug 864900)</li>

        <li>Fixed inconsistent handling of NLOW (new
        line on wrap) option by LeftCurly check. (bug 866501)</li>

        <li>JDK 1.4 classes used by usage checks.
        (bug 876570)</li>

        <li>Error in reporting UnusedLocalVariable for
        multi-dimensional array index.
        (bug 878608)</li>

        <li>MagicNumberCheck throws NumberFormatException
        with negative octal and hex ints and longs.</li>

        <li>JavadocStyleCheck throws StringIndexOutOfBoundsException
        when open tag character, &lt;, is the last character on a line.</li>

        <li>UnusedPrivateMethod false positive (ternary call).
        (bug 880954)</li>

        <li>Cast causes MagicNumberCheck error.
        (bug 890706)</li>

        <li>Conflict between ParenPad and
        NoWhiteSpaceBefore when code uses empty for loop
        initializers. (bug 895072)</li>

        <li>Fixed JavadocStyleCheck to handle inline
        javadoc tags correctly (bug 897749)</li>

        <li>Updated documentation for ReturnCount check to
        reflect that it doesn't check equals() method (bug 904443)</li>

        <li>Erroneous UnusedPrivateField error
        when the left operand is enclosed in parentheses
        and the field is in the right operand (bug 908339)</li>

        <li>ExplicitInitialization shouldn't report about
        explicitly initialized member of interface (bug 909619)</li>

        <li>DesignForExtension fires for private inner
        classes (bug 884035).</li>

        <li>Entity resolver for configuration files now handles
        all previous versions of the configuration DTD locally, without
        accessing the internet (bug 909987).</li>

        <li>Fixed handling of imports for inner classes
        in RedundantThrows (bug 925263)</li>

      </ul>

      <p>
        Removed features:
      </p>

      <ul>

        <li>Removed ignoreLines property of RegexpHeader check.  To make some
        line optional use &quot;^.*$&quot; regexp for this line.</li>

        <li>Fixing bug 895072 required changing the logic of
        the NoWhiteSpaceBefore and ParenPad checks.
        When a for loop has an empty initializer
        (like <code>for (; i &#x3C; j; i++)</code>)
        both checks will not check whitespace between the opening parenthesis
        and the first semicolon any more.
        To enforce your coding rules for such code, you need to use
        the EmptyForInitializerPad check.</li>

      </ul>

      <p>
        API changes:
      </p>
      <ul>

        <li>Added programmatic access to token type
        documentation (request 724871)</li>

        <li>All comments are wrapped in TextBlocks
        (request 885993).</li>

      </ul>
    </section>

    <section name="Release 3.3">
      <p>
        Distribution:
      </p>
      <ul>

        <li>Renamed checkstyle-version-optional.jar to
        checkstyle-optional-version.jar to make the distribution
        <a href="http://maven.apache.org">Maven</a> friendly.</li>

      </ul>

      <p>
        New features:
      </p>
      <ul>
        <li>Fixed grammar build process (request 827781).</li>

        <li>Added caseSensitive property to ImportOrder check
        (bug 842604).</li>

        <li>Added classpathref property to ant task
        (patch 835896, from Ville Skytta (scop)).</li>

      </ul>

      <p>
        Resolved bugs:
      </p>

      <ul>
        <li>Removed MutableException dependency from
        1.4 API.(bug 842756)</li>

        <li>j2ee.EntityBean check for constructor is incorrect
        (bug 846110).</li>

        <li>Fixed ArrayIndexOutOfBounds in JavaStyle
        (bug 841942).</li>

        <li>Fixed 8433887 - XHTML not handled correctly
        in JavadocStyle.</li>

        <li>Fixed ArrayTypeStyle error when type declaration
        and variable/method name are placed on different lines
        (bug 848750).</li>

        <li>Fixed several typos in documentation (patch 848483
        from Ville Skytta (scop)).</li>

        <li>xmllogger.dtd is out-of-date
        (bug 847974).</li>

        <li>ArrayTypeStyle shouldn't check method definition
        (bug 849450).</li>

        <li>Added link to summary page in
        checkstyle-frames.xsl (bug 852397).</li>

        <li>Fixed bug #791245: checkstyle-frames.xsl
        cannot handle multiple leafs.</li>

        <li>Fixed handling of inheritDoc in JavadocMethod
        check (bug 855839).</li>

        <li>Fixed bug #853225 - Indentation gives false
        errors.</li>

        <li>Wrong documentation for FinalLocalVariable
        (bug 860990).</li>

      </ul>
    </section>

    <section name="Release 3.2">
      <p>
        Distribution:
      </p>
      <ul>

        <li>Checks that are designed to be used for a
        special class of applications (like J2EE) or that require
        external libraries are now distributed in a separate jar
        file. This is similar to the way the <a href="http://ant.apache.org">Ant</a>
        distribution is organized.</li>

        <li>Updated Jakarta Regexp library to version 1.3.</li>

      </ul>

      <p>
        New features:
      </p>

      <ul>

        <li>Added ability for user to incorporate custom listeners (requests
        738205, 738388). Example listeners perform verbose and Commons Logging
        audits (request 737584).</li>

        <li>Added JavadocStyle check to ensure they are
        stylistically well formed. Nice patch from Chris Stillwell.</li>

        <li>Added check for trailing comma in array
        initialization (module ArrayTrailingComma, request
        696301).</li>

        <li>MagicNumberCheck now checks array initializers (request
        745949).</li>

        <li>Added check for uncommented main
        methods (debugging leftovers). (module UncommentedMain,
        request 732257)</li>

        <li>Added check to enforce that anonymous inner classes do
        not exceed a certain length (module AnonInnerLength,
        request 715709, contributed by Rob Worth).</li>

        <li>Added TypecastParenPadCheck to check the padding of
        typecasts (bug 750348).</li>

        <li>Added ignoreFormat property to HiddenFieldCheck (request 748830).</li>

        <li>Nice patch from Matt Quail to DetailAST to replace all the
        repeated int[] array construction with a BitSet.</li>

        <li>Patch from Matt Quail to stop the ugly hack of having hard coded
        constants in TokenTypes. The big risk was that when the grammar changed, the generated
        constants could change (patch 757846).</li>

        <li>Added excludes property to AvoidStarImport, contributed
        by Bill Schneider (request 744955).</li>

        <li>Added CyclomaticComplexityCheck from Simon Harris.</li>

        <li>Added check to catch equality comparison with string literals
        using the == operator (module StringLiteralEquality, request 754835).</li>

        <li>Added check for definition of covariant equals() method
        without overriding method equals(comp.lang.Object)
        (module coding.CovariantEquals).</li>

        <li>Added NestedTryDepthCheck and
        NestedIfDepthCheck from Simon Harris (requests 750736 and
        750744).</li>

        <li>Added IllegalTokenCheck from Simon Harris
        (request 750755).</li>

        <li>Added allowInSwitchCase property to AvoidNestedBlocksCheck
        to allow limiting the scope of variables to one case of a switch statement.</li>

        <li>Added checks for J2EE requirements.</li>

        <li>Added a check that an overriding clone() method invokes
        super.clone().</li>

        <li>Added a check that an overriding finalize() method invokes
        super.finalize().</li>

        <li>Added usage checks OneMethodPrivateFieldCheck, UnusedLocalVariableCheck,
        UnusedParameterCheck, UnusedPrivateFieldCheck, UnusedPrivateMethodCheck.</li>

        <li>Added filters for audit events (partially fulfills request 559103).
        A SuppressionFilter denies events according to a suppressions file (request 756416).</li>

        <li>Made basedir property of Checker OS agnostic
        (request 663149).</li>

        <li>Enhanced RedundantModifier to check that all private methods and all methods in a
        final class do not contain modifier final (discussed in request 775011).</li>

        <li>Added MethodLengthCheck option for counting empty and comment lines
        (requests 589358 and 654039).</li>

        <li>Added a check for illegal token text
        (requests 740694 and 750633).</li>

        <li>Added property to HiddenFieldCheck to ignore the parameter of
        property setter methods (request 790456).</li>

        <li>Added DescendantToken check (request 755021).</li>

        <li>Added IllegalCatch check from Simon Harris (request 750746).</li>

        <li>Added PackageDeclaration check from Simon Harris (request 750753).</li>

        <li>Added JUnitTestCase check from Simon Harris (request 750761).</li>

        <li>Added MutableException check from Simon Harris (request 750750).</li>

        <li>Added AbstractClassName check from Simon Harris (request 750749).</li>

        <li>Added ThrowsCount check from Simon Harris (request 750742).</li>

        <li>Added ReturnCount check from Simon Harris (request 750745).</li>

        <li>Added CyclomaticComplexity check from Simon Harris (request 750756).</li>

        <li>Added ExecutableStatementCount check from Simon Harris (request 750751).</li>

        <li>Added property to HiddenFieldCheck to ignore constructor parameters
        (request 798240).</li>

        <li>Added check for illegal type of variable,
        parameters and return value of methods contributed by Simon
        Harris (request 750739, module IllegalType)</li>

        <li>Added check for correct declarations order
        contributed by Roland Auckenthaler (module
        DeclarationOrder)</li>

        <li>Added ParameterAssignment check contributed
        by Simon Harris (request 750748).</li>

        <li>Added FinalLocalVariable check from Roland
        Auckenthaler and Kevin Gibbs.</li>

        <li>Added check for correct grouping/order of
        imports from Bill Schneider (module ImportOrder, request
        745548)</li>

        <li>Added Indentation check from John Richardson
        (request 493366)</li>

        <li>Added check for explicit initialization class
        and object variable to value which is default for variable's
        type (module ExplicitInitialization, request 614387).</li>

        <li>Added check to find duplicate code
        (module StrictDuplicateCode, request 650710).</li>

      </ul>

      <p>
        Resolved bugs:
      </p>

      <ul>

        <li>Fixed NPE when running ArrayTypeStyle check (bug
        744573)</li>

        <li>Typo in HideUtilityClassConstructor description (bug
        743973)</li>

        <li>False MagicNumberCheck errors for interfaces (bug
        745941)</li>

        <li>Docs for severity (bug 745937)</li>

        <li>EmptyBlock does not accept stmt option (bug 747400)</li>

        <li>Inner class fields interpreted as local variables (bug 747530)</li>

        <li>Fixed typo in documentation for PackageName
        (bug 7480028)</li>

        <li>NumberFormatException in MagicNumberCheck (bug 748913)</li>

        <li>Removed broken support for checking typecasts from
        ParenPadCheck (bug 750348)</li>

        <li>Fixed grammar problems with unclosed string
        literals and multiple-lines comments (bug 694111)</li>

        <li>Fixed grammar definition for identifiers to
        handle all Unicode symbols (bug 755744)</li>

        <li>Corrected misspelling of &quot;precede&quot; (bug 744342)</li>

        <li>EmptyForIteratorPadCheck errors when for statement
        wraps at the iterator (bug 777471)</li>

        <li>False alarms from IllegalInstantiation for
        user defined classes with the same names as those in
        java.lang (bug 772832)</li>

        <li>NoSuchElementException in JavadocStyleCheck (bug 785514)</li>

        <li>RedundantModifierCheck error for public modifier of a
        method defined in an inner implementation (bug 784814)</li>

        <li>MagicNumberCheck does not permits negative constants (bug 788106)</li>

        <li>NullPointerException in Unused... checks (bug 787672)</li>

        <li>NoSuchMethodError when line wrapped at dot
        operator (bug 790209)</li>

        <li>Removed finder restrictions of LocalHomeInterfaceCheck
        and RemoteHomeInterfaceCheck (bug 791591)</li>

        <li>Fixed NoSuchMethodError when line wrapped at dot operator (bugid 790209)</li>

        <li>Incorrect usage checks documentation (bug 790457)</li>

        <li>CyclomaticComplexityCheck not documented in docs (bug 783800)</li>

        <li>Changed configuration documentation example from checkstyle_checks.xml
        to sun_checks.xml  (see bug 750169)</li>

        <li>JavadocStyleCheck doesn't accept {@inheritDoc} javadoc (bug 798405)</li>

        <li>Unused local variables are not always detected (bug 798111)</li>

        <li>Fixed allowThrowsTagsForSubclasses/allowMissingThrowsTag interfere (bug 803577) </li>

        <li>Unused... checks don't work together (bug 805954)</li>

        <li>NoWhitespaceBeforeCheck error with an interface (bug 806242)</li>

        <li>NoWhitespaceBeforeCheck error for anonymous inner class (bug 806243)</li>

        <li>Usage of optional checks should be documented (bug 806961)</li>

        <li>Changed default format for ConstantName to
        ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ to please regexp library (see bug
        807571)</li>

        <li>HiddenFieldCheck error for a local variable of a static
        method with same name as an instance field (bug 827713)</li>

        <li>Changed HideUtilityClassConstructorCheck behaviour for classes
        that do not extend java.lang.Object directly (partial fix for bug 824754)</li>

        <li>False alarms for abstract classes from FinalClass (bug 837012)</li>

        <li>Added Checker.removeListener() (fix for 834367)</li>

      </ul>

      <p>
        API changes (only relevant for IDE plugin authors):
      </p>
      <ul>

        <li>AuditListener and AuditEvent have been moved
        from package com.puppycrawl.tools.checkstyle to package
        com.puppycrawl.tools.checkstyle.api.</li>

      </ul>

    </section>

    <section name="Release 3.1">

      <p>
        New features:
      </p>
      <ul>
        <li>Patch from David Schneider to have severity levels
        for each check (request 597683).</li>

        <li>Added check to avoid inline conditionals like
        &quot;b ? x : y&quot; (module AvoidInlineConditionals, request
        597790).</li>

        <li>Added check that blocks are not introduced at
        arbitrary places but only for if, while, etc. (module
        AvoidNestedBlocks, request 632442).</li>

        <li>Added check to enforce that utility classes
        (classes that have only static methods) cannot be instantiated
        (module HideUtilityClassConstructor, request 634838).</li>

        <li>Added check to enforce an API design that shields
        classes against bugs in derived classes (module
        DesignForExtension, request 659715).</li>

        <li>Added check to enforce that Interfaces do not
        contain only constants (module InterfaceIsType, request 659717, see
        [Bloch, Effective Java], Item 17 &quot;Use interfaces only to define
        types&quot;).</li>

        <li>Added check to detect the double-checked locking
        idiom (module DoubleCheckedLocking, request 709333).</li>

        <li>Added check to enforce C style (char c[]) or Java
        style (char[] c) for array type declaration (module ArrayTypeStyle,
        request 493380).</li>

        <li>Added check to enforce that method parameters are
        final (module FinalParameters, request 528196).</li>

        <li>Added module to enforce that files end
        with a newline character, contributed by Christopher Lenz
        (module NewLineAtEndOfFile, request 662544).</li>

        <li>Many documentation improvements, contributed by
        Peter Dobratz.</li>

        <li>Patch from Simon Kitching to allow more
        configuration control over the JavadocMethodCheck.</li>

        <li>Checkstyle ant task outputs version info
        in verbose and debug mode (request 550483).</li>

        <li>Patch from Oleg Sukhodolsky to add FinalCheck to
        check that classes are declared final if they only contain private
        constructors (request 696290).</li>

        <li>Patch from Oleg Sukhodolsky to add
        MissingSwitchDefaultCheck to check that a switch statement has a
        default clause (request 564199).</li>

        <li>Patch from Oleg Sukhodolsky to fix TranslationCheck
        Test bug. (bug 720925).</li>

        <li>Patch from Oleg Sukhodolsky to fix documentation.
        (bug 727896).</li>

        <li>Added check to find empty statements (module
        EmptyStatement, request 724573).</li>

        <li>Added check to find magic numbers (module
        MagicNumber, request 564206).</li>

        <li>One more option for JavadocMethodCheck
        (allowThrowsTagsForSubclasses, request 540383)</li>

        <li>Added sourceName property to AuditEvent and
        LocalizedMessage; and &quot;source&quot; attribute to
        &quot;error&quot; element of XMLLogger output (request 686336).</li>

        <li>Added line and column numbers to configuration
        parse exceptions (request 714962).</li>

        <li>Added check for redundant exceptions in
        throws clause (module RedundantThrows, request 579056)</li>

        <li>Added property for GenericIllegalRegexp to
        customize reported message (module GenericIllegalRegexp,
        property message, request 738567)</li>

        <li>Moved the location of the file
        checkstyle_packages.xml to be in the directory
        com/puppycrawl/tools/checkstyle. This is to work around a bug in
        NetBeans (request 739881).</li>

        <li>Patch from Dale King to enhance the GUI with
        a Reload Java File button and storage of the current directory
        of the last opened file (request 740545).</li>

        <li>Patch from Bill Schneider to add
        GenericIllegalRegexpCheck property to perform
        case-insensitive matches (request 740112).</li>

      </ul>

      <p>
        Resolved bugs:
      </p>

      <ul>

        <li>False alarms from RightCurly module for code that
        does not have braces in if-then-else (bug 689836).</li>

        <li>Grammar incorrectly defaulting unqualified floating
        point literals to be float, when they should be double (bug
        713716).</li>

        <li>&quot;threadsafe&quot; was treated as a Java
        keyword, resulting in parser errors for sources that use it as an
        identifier (bug 710319).</li>

        <li>ConfigurationLoader was not public (only relevant
        for IDE plugin authors).</li>

        <li>HTML syntax errors in documentation (bug
        721458).</li>

        <li>Error when writing a DOS file name from
        checkstyle-frames.xsl (bug 713845).</li>

        <li>Files were not being closed by
        Utils.getLines().</li>

        <li>Missing documentation for the EmptyForIterator
        check (bug 740038).</li>

      </ul>

      <p>
        Development Team:
      </p>
      <ul>
        <li>Oleg Sukhodolsky has joined the team.</li>
      </ul>

    </section>

    <section name="Release 3.0">

      <p>
        New features:
      </p>

      <ul>
        <li>Completely new architecture based around pluggable modules. This means that users can now write their own checks without changing the source code of checkstyle itself (request 578712).</li>
        <li>Users can specify the Java token types for which a check must be performed. For example users can now control that there should be whitespace after 'synchronized' but not after 'if' (request 536385).</li>
        <li>Detect classes that override 'equals()' but not 'hashCode()' (request 554373).</li>
        <li>Detect inner assignments, e.g. 'this.add(label = new JLabel("yes, I'm a C hacker"));' (request 521325).</li>
        <li>Detect matches of generic regular expressions (requests 595254, 621247, 630536).</li>
        <li>Find empty blocks (not only empty catch blocks, request 609523).</li>
        <li>Check spaces at empty for iterators (requests 565666, 583725).</li>
        <li>Detect missing property file keys in internationalized applications (request 634966).</li>
        <li>Check content of @author and @version tag against a regular expression.</li>
        <li>Detect hiding of fields by parameters or local variables with the same name (request 471897).</li>
        <li>Detect obsolete final modifier in interfaces (request 651121).</li>
        <li>Detect whitespace before ';' (request 521323).</li>
        <li>Added DTD for XML output (request 622157).</li>
        <li>Added an XSL stylesheet to convert XML output to plain text, contributed by Jon Scott Stevens.</li>
        <li>Added a Portuguese localization, contributed by Pedro Morais.</li>
        <li>Added a Finnish localization, contributed by Ville SkyttÃ¤.</li>
        <li>Added a French localization, contributed by Pierre Dittgen.</li>
      </ul>

      <p>
        Resolved bugs:
      </p>
      <ul>
        <li>Fully-qualified @throws claimed unused (bug 658805).</li>
        <li>Expected @return tag when one is there (bug 579190).</li>
        <li>Package name reported incorrectly (bug 622290).</li>
        <li>Empty header filename silently ignored (bug 629139).</li>
        <li>Array instantiation incorrectly flagged (bug 626875).</li>
        <li>Tests fail with non-English locale (bug 594469).</li>
        <li>Cachefile streams were not closed (bug 665016).</li>
        <li>Ant Task: NullPointerException when type was not specified in formatter (bug 670321).</li>
      </ul>

      <p>
        Removed features:
      </p>
      <ul>
        <li>Removed support for Japanese localization until we find a new maintainer.</li>
      </ul>

      <p>
        API changes (only relevant for IDE plugin authors):
      </p>
      <ul>
        <li>Configuration is not based on Properties any more. Instead a Configuration interface is used, IDE plugins can define their own way of creating Configurations or they can reuse the provided ConfigurationLoader to read checkstyle's standard XML config files.</li>
      </ul>

      <p>
        Development Team:
      </p>
      <ul>
        <li>Rick Giles has joined the team.</li>
      </ul>
    </section>

    <section name="Release 2.4">
      <p>
        New features:
      </p>
      <ul>
        <li>Major refactoring on the way Checkstyle is configured. It is now completely based around properties. Big thanks to Vincent Massol for the suggestion on how to refactor the ANT task (bug 605141).</li>
        <li>Check the package name against a pattern (request 597787). Patch provided by Simon Langford.</li>
        <li>Detect the number of parameters in a declaration exceeding a specified amount (request 582144).</li>
        <li>Inspired by patch 580410 from Shinya Ohnuma, now the error messages are localised.</li>
        <li>Support checking to determine if an unused <code>@throws</code> exception is a subclass of <code>java.lang.Error</code> (request 583719).</li>
        <li>Incorporate patch 555878 from Rick Giles to allow pattern for local final variables to be specified.</li>
        <li>Incorporate patch 566855 from Rob Worth to optionally check that parenthesis are padded with spaces.</li>
        <li>Incorporate patch 590931 from Vijay Aravamudhan to improve documentation of the build.xml file.</li>
        <li>Incorporate patch from Vijay Aravamudhan to enforce requiring @version tag (request 543964).</li>
        <li>Incorporate patch 607481 from Ville SkyttÃ¤ to enforce wrap on operator at EOL.</li>
      </ul>

      <p>
        Resolved bugs:
      </p>
      <ul>
        <li>Incorporate a patch from Ronald Hastings (Boeing) to correctly handle C++ style comments being between Javadoc comments and declarations.</li>
      </ul>

      <p>
        API changes (only relevant for IDE plugin authors):
      </p>
      <ul>
        <li>Many changes to the Configuration object.</li>
      </ul>
    </section>

    <section name="Release 2.3">
      <p>
        New features:
      </p>
      <ul>
        <li>Support checking to determine if an unused <code>@throws</code> exception is a subclass of <code>java.lang.RuntimeException</code> (request 540382).</li>
        <li>Detect instantiations of classes that should not be instantiated (e.g. java.lang.Boolean) (request 550205).</li>
        <li>Added ability to specify the base directory for reporting file names (request 571161).</li>
        <li>Check for line wrapping on operators (request 553160).</li>
        <li>Detect empty <code>try</code> blocks.</li>
        <li>Detect empty <code>catch</code> blocks (request 516255).</li>
        <li>Detect empty <code>finally</code> blocks.</li>
        <li>Detect to-do comments (request 504275).</li>
        <li>Detect use of lowercase l ("ell") in long integer literals.</li>
        <li>Include column number in the XML output (request 555262).</li>
        <li>Added ability to specify a properties file on the command line (request 557544).</li>
        <li>Check for whitespace around "{" and "}" (request 557544).</li>
        <li>Fix Javadoc errors under JDK 1.4 (request 568553).</li>
        <li>Detect redundant <code>abstract</code> modifier in interfaces (request 573485).</li>
        <li>Support running Checkstyle using the <code>-jar</code> option.</li>
      </ul>

      <p>
        Resolved bugs:
      </p>
      <ul>
        <li>Better error reporting for missing properties files (bug 576165).</li>
        <li>Ant task now logs style violations as errors (bug 561616).</li>
      </ul>

      <p>
        API changes (only relevant for IDE plugin authors):
      </p>
      <ul>
        <li>The get/setOutputStream methods have been removed from the AuditListener interface. The XMLLogger and DefaultLogger implementations now expect OutputStreams to be provided as a constructor argument.</li>
        <li>The DefaultLogger now differentiates between info messages ("started checking file ...", etc.)  and error messages (style errors found by checkstyle).</li>
      </ul>
    </section>

    <section name="Release 2.2">
      <p>
        Resolved bugs:
      </p>
      <ul>
        <li>The cache was not invalidated upon parameter change (Bug 522282).</li>
        <li>Tabs were not counted correctly in line length checks (Bug 524671).</li>
        <li>Problem when a Checker could not be created (Bug 528358).</li>
        <li>The documentation of the command line property names did not list the property checkstyle.allow.tabs (Bug 529975).</li>
        <li>The default regular expression for constant names allowed consecutive '_' characters to occur (Bug 540358).</li>
        <li>Checkstyle reported unused @throws tag for multiple declarations of the same Exception. According to the Java BugParade this is incorrect, multiple @throws tags for the same exception are OK (Bug 540384).</li>
      </ul>

      <p>
        New features:
      </p>
      <ul>
        <!--(Feature request 498879)-->
        <li>added check for whitespace around '()'</li>
        <!--(Feature request 500122)-->
        <li>added support for JDK 1.4 assert statements</li>
        <!--(Feature request 515787)-->
        <li>added column number to error messages for better Emacs integration</li>
        <!--(Feature request 524650)-->
        <li>added possibility to disable line-length checking by means of regular expressions</li>
        <!--(Feature request 531229)-->
        <li>added possibility to disallow import of package hierarchies, e.g. sun.*</li>
        <!--(Feature request 534038)-->
        <li>added failureProperty to ANT task</li>
        <!--(Feature request 537107)-->
        <li>added check for 'public' modifier in interface method declarations, following the recommendation in chapter 9.4 of the Java Language Specification</li>
        <!--(Feature request 545128)-->
        <li>added -r "dir" option to the commandline frontend, checkstyle will find all Java files contained in the specified directory</li>
        <!--(Patch 531230 + enhancements)-->
        <li>incorporated patch from Warner Onstine to configure the ANT task by means of a property file</li>
        <li>added 'contrib' directory, contains XSL stylesheets for formatting checkstyle's XML output (contributions by Ingmar Stein, Stephane Bailliez, Scott McCrory and Gray Herter)</li>
      </ul>
    </section>

    <section name="Release 2.1">
      <p>
        New features:
      </p>
      <ul>
        <li>added check for package.html</li>
        <li>added flag allowPackage which acts similar as allowProtected</li>
        <li>added support for ignoring multiple lines in the file header</li>
        <li>added support for specifying the file header by means of regular expressions</li>
        <li>added whitespace checks around '.', e.g. System . out . println()</li>
        <li>added check for names of methods and local variables</li>
        <li>check the order of modifiers (public, static, etc.) against the recommendation in the Java Language specification</li>
        <li>added checks for curly braces placement</li>
        <li>incorporated patch from Andrew Lang for more robust Javadoc parsing</li>
      </ul>
    </section>

    <section name="Release 2.0">
      <p>
        Changes:
      </p>
      <ul>
        <li>Now released under the GNU Lesser General Public License (LGPL).</li>
        <li>Fix bug #508010, documentation and code are inconsistent.</li>
        <li>Changes to make it build "out of the box".</li>
      </ul>
    </section>
  </body>
</document>
