# Checkstyle Release Notes

## Release 3.4

New features:

- Added a 'version' attribute to the 'checkstyle' element in the XML output document (request 853128).
- FinalParameter can be applied to catch blocks (request 848820).
- Improved german translation, contributed by Oliver Fischer (patch 862911).
- Added stylesheet to translate xml output into comma separated valuaes format (contrib/checkstyle-csv.xsl, request 764153).
- Added BooleanExpressionComplexity check from Simon Harris (request 750760)
- Added ClassDataAbstractionCoupling check from Simon Harris (request 750758)
- Added ClassFanOutComplexity check from Simon Harris (request 750759)
- Added NPathComplexity check from Simon Harris (request 750757)
- Added several more log() methods to AbstractViolationReporter. (request 843551)
- Added check to ensure that default is a last label in the switch statement.(module DefaultComesLast, request 754486 )
- Added check to ensure that all classes define constructor. (module MissingCtor, request 696129)
- Added check to warn on fall-through in case with code not followed by break. (module FallThrough, request 754438)
- Added check to ensure that every variable is declared in its own statement and on its own line (module MultipleVariableDeclarations, requests 639233, 753858, 844705)
- Added check to ensure that references to non-static fields and methods should be quailified. (module RequireThis, contributed by Stephen Bloch, requests 755550, 696295).
- Added multiLines property to regexpCheck (request 597676)
- 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)
- Added check to forbid endline comments. (module TrailingComment, request 744970)
- Added applyTo(Public|Protected|Package|Private) properties to check MemberName. (request 695935)
- Added check to verify padding in empty for loop initializers. (module EmptyForInitializerPad, part of fix for bug 895072)
- Added checkEmptyJavadoc property to JavadocStyle check, contributed by Daniel Grenner (request 849056, patch 903597)
- Added format property to ReturnCount check to configure ignored method names (request 904437)
- Added attribute 'default' to configuration <property> 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.
- Ignore comments in GenericIllegalRegexp check, contributed by Daniel Grenner (request 680988, patch 902109).
- UnnecessaryParentheses check contributed by Eric Roe (patch 911086, request 634834)
- Added ignoreNonLocal property to UnusedParameter check to check only private and static methods (request 787683)
- Added excludeScope property to Javadoc(Method|Variable|Type|Style) checks (request 846108)

Resolved bugs:

- Incorrect documentation of cmdline options (bug 865610).
- FinalParameter now reports column of start of parameter declaration. (bug 864900)
- Fixed inconsistent handling of NLOW (new line on wrap) option by LeftCurly check. (bug 866501)
- JDK 1.4 classes used by usage checks. (bug 876570)
- Error in reporting UnusedLocalVariable for multi-dimensional array index. (bug 878608)
- MagicNumberCheck throws NumberFormatException with negative octal and hex ints and longs.
- JavadocStyleCheck throws StringIndexOutOfBoundsException when open tag character, <, is the last character on a line.
- UnusedPrivateMethod false positive (ternary call). (bug 880954)
- Cast causes MagicNumberCheck error. (bug 890706)
- Conflict between ParenPad and NoWhiteSpaceBefore when code uses empty for loop initializers. (bug 895072)
- Fixed JavadocStyleCheck to handle inline javadoc tags correctly (bug 897749)
- Updated documentation for ReturnCount check to reflect that it doesn't check equals() method (bug 904443)
- Erroneous UnusedPrivateField error when the left operand is enclosed in parentheses and the field is in the right operand (bug 908339)
- ExplicitInitialization shouldn't report about explicitly initialized member of interface (bug 909619)
- DesignForExtension fires for private inner classes (bug 884035).
- Entity resolver for configuration files now handles all previous versions of the configuration DTD locally, without accessing the internet (bug 909987).
- Fixed handling of imports for inner classes in RedundantThrows (bug 925263)

Removed features:

- Removed ignoreLines property of RegexpHeader check. To make some line optional use "^.*$" regexp for this line.
- Fixing bug 895072 required changing the logic of the NoWhiteSpaceBefore and ParenPad checks. When a for loop has an empty initializer (like for (; i < j; i++)) 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.

API changes:

- Added programmatic access to token type documentation (request 724871)
- All comments are wrapped in TextBlocks (request 885993).

## Release 3.3

Distribution:

- Renamed checkstyle-version-optional.jar to checktyle-optional-version.jar to make the distribution Maven friendly.

New features:

- Fixed grammar build process (request 827781).
- Added caseSensitive property to ImportOrder check (bug 842604).
- Added classpathref property to ant task (patch 835896, from Ville Skytta (scop)).

Resolved bugs:

- Removed MutableException dependency from 1.4 API.(bug 842756)
- j2ee.EntityBean check for constructor is incorrect (bug 846110).
- Fixed ArrayIndexOutOfBounds in JavaStyle (bug 841942).
- Fixed 8433887 - XHTML not handled correctly in JavadocStyle.
- Fixed ArrayTypeStyle error when type declaration and variable/method name are placed on different lines (bug 848750).
- Fixed several typos in documentation (patch 848483 from Ville Skytta (scop)).
- xmllogger.dtd is out-of-date (bug 847974).
- ArrayTypeStyle shouldn't check method definition (bug 849450).
- Added link to summary page in checkstyle-frames.xsl (bug 852397).
- Fixed bug #791245: checkstyle-frames.xsl cannot handle multiple leafs.
- Fixed handling of inheritDoc in JavadocMathod check (bug 855839).
- Fixed bug #853225 - Indentation gives false errors.
- Wrong documentation for FinalLocalVariable (bug 860990).

## Release 3.2

Distribution:

- 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 Ant distribution is organized. See the documentation of optional checks for details.
- Updated Jakarta Regexp library to version 1.3.

New features:

- Added ability for user to incorporate custom listeners (requests 738205, 738388). Example listeners perform verbose and Commons Logging audits (request 737584).
- Added JavadocStyle check to ensure they are stylistically well formed. Nice patch from Chris Stillwell.
- Added check for trailing comma in array initialization (module ArrayTrailingComma, request 696301).
- MagicNumberCheck now checks array initializers (request 745949).
- Added check for uncommented main methods (debugging leftovers). (module UncommentedMain, request 732257)
- Added check to enforce that anonymous inner classes do not exceed a certain length (module AnonInnerLength, request 715709, contributed by Rob Worth).
- Added TypecastParenPadCheck to check the padding of typecasts (bug 750348).
- Added ignoreFormat property to HiddenFieldCheck (request 748830).
- Nice patch from Matt Quail to DetailAST to replace all the repeated int[] array construction with a BitSet.
- 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).
- Added excludes property to AvoidStarImport, contributed by Bill Schneider (request 744955).
- Added CyclomaticComplexityCheck from Simon Harris.
- Added check to catch equality comparison with string literals using the == operator (module StringLiteralEquality, request 754835).
- Added check for definition of covariant equals() method without overriding method equals(comp.lang.Object) (module coding.CovariantEquals).
- Added NestedTryDepthCheck and NestedIfDepthCheck from Simon Harris (requests 750736 and 750744).
- Added IllegalTokenCheck from Simon Harris (request 750755).
- Added allowInSwitchCase property to AvoidNestedBlocksCheck to allow limiting the scope of variables to one case of a switch statement.
- Added checks for J2EE requirements.
- Added a check that an overriding clone() method invokes super.clone().
- Added a check that an overriding finalize() method invokes super.finalize().
- Added usage checks OneMethodPrivateFieldCheck, UnusedLocalVariableCheck, UnusedParameterCheck, UnusedPrivateFieldCheck, UnusedPrivateMethodCheck.
- Added filters for audit events (partially fulfills request 559103). A SuppressionFilter denies events according to a suppressions file (request 756416).
- Made basedir property of Checker OS agnostic (request 663149).
- Enhanced RedundantModifier to check that all private methods and all methods in a final class do not contain modifier final (discussed in request 775011).
- Added MethodLengthCheck option for counting empty and comment lines (requests 589358 and 654039).
- Added a check for illegal token text (requests 740694 and 750633).
- Added property to HiddenFieldCheck to ignore the parameter of property setter methods (request 790456).
- Added DescendantToken check (request 755021).
- Added IllegalCatch check from Simon Harris (request 750746).
- Added PackageDeclaration check from Simon Harris (request 750753).
- Added JUnitTestCase check from Simon Harris (request 750761).
- Added MutableException check from Simon Harris (request 750750).
- Added AbstractClassName check from Simon Harris (request 750749).
- Added ThrowsCount check from Simon Harris (request 750742).
- Added ReturnCount check from Simon Harris (request 750745).
- Added CyclomaticComplexity check from Simon Harris (request 750756).
- Added ExecutableStatementCount check from Simon Harris (request 750751).
- Added property to HiddenFieldCheck to ignore constructor parameters (request 798240).
- Added check for illegal type of variable, parameters and return value of methods contributed by Simon Harris (request 750739, module IllegalType)
- Added check for correct declarations order contributed by Roland Auckenthaler (module DeclarationOrder)
- Added ParameterAssignment check contributed by Simon Harris (request 750748).
- Added FinalLocalVariable check from Roland Auckenthaler and Kevin Gibbs.
- Added check for correct grouping/order of imports from Bill Schneider (module ImportOrder, request 745548)
- Added Indentation check from John Richardson (request 493366)
- Added check for explicit initialization class and object variable to value which is default for variable's type (module ExplicitInitialization, request 614387).
- Added check to find duplicate code (module StrictDuplicateCode, request 650710).

Resolved bugs:

- Fixed NPE when running ArrayTypeStyle check (bug 744573)
- Typo in HideUtilityClassConstructor description (bug 743973)
- False MagicNumberCheck errors for interfaces (bug 745941)
- Docs for severity (bug 745937)
- EmptyBlock does not accept stmt option (bug 747400)
- Inner class fields interpreted as local variables (bug 747530)
- Fixed typo in documentation for PackageName (bug 7480028)
- NumberFormatException in MagicNumberCheck (bug 748913)
- Removed broken support for checking typecasts from ParenPadCheck (bug 750348)
- Fixed grammar problems with unclosed string literals and multiple-lines comments (bug 694111)
- Fixed grammar definition for identifiers to handle all Unicode symbols (bug 755744)
- Corrected misspelling of "precede" (bug 744342)
- EmptyForIteratorPadCheck errors when for statement wraps at the iterator (bug 777471)
- False alarms from IllegalInstantiation for user defined classes with the same names as those in java.lang (bug 772832)
- NoSuchElementException in JavadocStyleCheck (bug 785514)
- RedundantModifierCheck error for public modifier of a method defined in an inner implementation (bug 784814)
- MagicNumberCheck does not permits negative constants (bug 788106)
- NullPointerException in Unused... checks (bug 787672)
- NoSuchMethodError when line wrapped at dot operator (bug 790209)
- Removed finder restrictions of LocalHomeInterfaceCheck and RemoteHomeInterfaceCheck (bug 791591)
- Fixed NoSuchMethodError when line wrapped at dot operator (bugid 790209)
- Incorrect usage checks documentation (bug 790457)
- CyclomaticComplexityCheck not documented in docs (bug 783800)
- Changed configuration documentation example from checkstyle_checks.xml to sun_checks.xml (see bug 750169)
- JavadocStyleCheck doesn't accept {@inheritDoc} javadoc (bug 798405)
- Unused local variables are not always detected (bug 798111)
- Fixed allowThrowsTagsForSubclasses/allowMissingThrowsTag interfere (bug 803577)
- Unused... checks don't work together (bug 805954)
- NoWhitespaceBeforeCheck error with an interface (bug 806242)
- NoWhitespaceBeforeCheck error for anonymous inner class (bug 806243)
- Usage of optional checks should be documented (bug 806961)
- Changed default format for ConstantName to ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ to please regexp library (see bug 807571)
- HiddenFieldCheck error for a local variable of a static method with same name as an instance field (bug 827713)
- Changed HideUtilityClassConstructorCheck behaviour for classes that do not extend java.lang.Object directly (partial fix for bug 824754)
- False alarms for abstract classes from FinalClass (bug 837012)
- Added Checker.removeListener() (fix for 834367)

API changes (only relevant for IDE plugin authors):

- AuditListener and AuditEvent have been moved from package com.puppycrawl.tools.checkstyle to package com.puppycrawl.tools.checkstyle.api.

## Release 3.1

New features:

- Patch from David Schneider to have severity levels for each check (request 597683).
- Added check to avoid inline conditionals like "b ? x : y" (module AvoidInlineConditionals, request 597790).
- Added check that blocks are not introduced at arbitrary places but only for if, while, etc. (module AvoidNestedBlocks, request 632442).
- Added check to enforce that utility classes (classes that have only static methods) cannot be instantiated (module HideUtilityClassConstructor, request 634838).
- Added check to enforce an API design that shields classes against bugs in derived classes (module DesignForExtension, request 659715).
- Added check to enforce that Interfaces do not contain only constants (module InterfaceIsType, request 659717, see [Bloch, Effective Java], Item 17 "Use interfaces only to define types").
- Added check to detect the double-checked locking idiom (module DoubleCheckedLocking, request 709333).
- Added check to enforce C style (char c[]) or Java style (char[] c) for array type declaration (module ArrayTypeStyle, request 493380).
- Added check to enforce that method parameters are final (module FinalParameters, request 528196).
- Added module to enforce that files end with a newline character, contributed by Christopher Lenz (module NewLineAtEndOfFile, request 662544).
- Many documentation improvements, contributed by Peter Dobratz.
- Patch from Simon Kitching to allow more configuration control over the JavadocMethodCheck.
- Checkstyle ant task outputs version info in verbose and debug mode (request 550483).
- Patch from Oleg Sukhodolsky to add FinalCheck to check that classes are declared final if they only contain private constructors (request 696290).
- Patch from Oleg Sukhodolsky to add MissingSwitchDefaultCheck to check that a switch statement has a default clause (request 564199).
- Patch from Oleg Sukhodolsky to fix TranslationCheck Test bug. (bug 720925).
- Patch from Oleg Sukhodolsky to fix documentation. (bug 727896).
- Added check to find empty statements (module EmptyStatement, request 724573).
- Added check to find magic numbers (module MagicNumber, request 564206).
- One more option for JavadocMethodCheck (allowThrowsTagsForSubclasses, request 540383)
- Added sourceName property to AuditEvent and LocalizedMessage; and "source" attribute to "error" element of XMLLogger output (request 686336).
- Added line and column numbers to configuration parse exceptions (request 714962).
- Added check for redundant exceptions in throws clause (module RedundantThrows, request 579056)
- Added property for GenericIllegalRegexp to customize reported message (module GenericIllegalRegexp, property message, request 738567)
- 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).
- 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).
- Patch from Bill Schneider to add GenericIllegalRegexpCheck property to perform case-insensitive matches (request 740112).

Resolved bugs:

- False alarms from RightCurly module for code that does not have braces in if-then-else (bug 689836).
- Grammar incorrectly defaulting unqualified floating point literals to be float, when they should be double (bug 713716).
- "threadsafe" was treated as a Java keyword, resulting in parser errors for sources that use it as an identifier (bug 710319).
- ConfigurationLoader was not public (only relevant for IDE plugin authors).
- HTML syntax errors in documentation (bug 721458).
- Error when writing a DOS file name from checkstyle-frames.xsl (bug 713845).
- Files were not being closed by Utils.getLines().
- Missing documentation for the EmptyForIterator check (bug 740038).

Development Team:

- Oleg Sukhodolsky has joined the team.

## Release 3.0

New features:

- Completely new architecture based around pluggable modules. This means that users can now write their own checks without changing the sourcecode of checkstyle itself (request 578712).
- 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).
- Detect classes that override 'equals()' but not 'hashCode()' (request 554373).
- Detect inner assignments, e.g. 'this.add(label = new JLabel("yes, I'm a C hacker"));' (request 521325).
- Detect matches of generic regular expressions (requests 595254, 621247, 630536).
- Find empty blocks (not only empty catch blocks, request 609523).
- Check spaces at empty for iterators (requests 565666, 583725).
- Detect missing property file keys in internationalized applications (request 634966).
- Check content of @author and @version tag against a regular expression.
- Detect hiding of fields by parameters or local variables with the same name (request 471897).
- Detect obsolete final modifier in interfaces (request 651121).
- Detect whitespace before ';' (request 521323).
- Added DTD for XML output (request 622157).
- Added an XSL stylesheet to convert XML output to plain text, contributed by Jon Scott Stevens.
- Added portuguese localization, contributed by Pedro Morais.
- Added finnish localization, contributed by Ville Skyttä.
- Added french localization, contributed by Pierre Dittgen.

Resolved bugs:

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

Removed features:

- Removed support for japanese localization until we find a new maintainer.

API changes (only relevant for IDE plugin authors):

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

Development Team:

- Rick Giles has joined the team.

## Release 2.4

New features:

- 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).
- Check the package name against a pattern (request 597787). Patch provided by Simon Langford.
- Detect the number of parameters in a declaration exceeding a specified amount (request 582144).
- Inspired by patch 580410 from Shinya Ohnuma, now the error messages are localised.
- Support checking to determine if an unused @throws exception is a subclass of java.lang.Error (request 583719).
- Incorporate patch 555878 from Rick Giles to allow pattern for local final variables to be specified.
- Incorporate patch 566855 from Rob Worth to optionally check that parenthesis are padded with spaces.
- Incorporate patch 590931 from Vijay Aravamudhan to improve documentation of the build.xml file.
- Incorporate patch from Vijay Aravamudhan to enforce requiring @version tag (request 543964).
- Incorporate patch 607481 from Ville Skyttä to enforce wrap on operator at EOL.

Resolved bugs:

- Incorporate a patch from Ronald Hastings (Boeing) to correctly handle C++ style comments being between Javadoc comments and declarations.

API changes (only relevant for IDE plugin authors):

- Many changes to the Configuration object.

## Release 2.3

New features:

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

Resolved bugs:

- Better error reporting for missing properties files (bug 576165).
- Ant task now logs style violations as errors (bug 561616).

API changes (only relevant for IDE plugin authors):

- 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.
- The DefaultLogger now differentiates between info messages ("started checking file ...", etc.) and error messages (style errors found by checkstyle).

## Release 2.2

Resolved bugs:

- The cache was not invalidated upon parameter change (Bug 522282).
- Tabs were not counted correctly in line length checks (Bug 524671).
- Problem when a Checker could not be created (Bug 528358).
- The documentation of the command line property names did not list the property checkstyle.allow.tabs (Bug 529975).
- The default regular expression for constant names allowed consecutive '_' characters to occur (Bug 540358).
- 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).

New features:

- added check for whitespace around '()'
- added support for JDK 1.4 assert statements
- added column number to error messages for better Emacs integration
- added possibility to disable line-length checking by means of regular expressions
- added possibility to disallow import of package hierarchies, e.g. sun.*
- added failureProperty to ANT task
- added check for 'public' modifier in interface method declarations, following the recommendation in chapter 9.4 of the Java Language Specification
- added -r "dir" option to the commandline frontend, checkstyle will find all Java files contained in the specified directory
- incorporated patch from Warner Onstine to configure the ANT task by means of a property file
- added 'contrib' directory, contains XSL stylesheets for formating checkstyle's XML output (contributions by Ingmar Stein, Stephane Bailliez, Scott McCrory and Gray Herter)

## Release 2.1

New features:

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

## Release 2.0

Changes:

- Now released under the GNU Lesser General Public License (LGPL).
- Fix bug #508010, documentation and code are inconsistent.
- Changes to make it build "out of the box".

Back to the Checkstyle Home Page

Copyright © 2002-2003 Oliver Burn. All rights Reserved.