After two months of work, PMD 3.6 is out the door! The most interesting new feature is support for checking JSP/JSF pages - thanks much to Pieter Vanraemdonck for implementing a grammar and doing lots of integration work. He and Allan Caplan teamed up to write eight rules that take advantage of this new capability; you can see the JSF rule here and the JSP rules here.
There are also five new rules for the current PMD rulesets:
Basic ruleset: AvoidThreadGroup
Design ruleset: UnsynchronizedStaticDateFormatter
Strings ruleset: InefficientEmptyStringCheck, InsufficientStringBufferDeclaration
JUnit ruleset: SimplifyBooleanAssertion
You can see exactly what rules were added in each PMD release now using the "release number" rulesets, e.g.:
$ ./pmd.sh Foo.java text 36 -debug
In JDK 1.4 mode
Loaded rule InsufficientStringBufferDeclaration
Loaded rule IframeMissingSrcAttribute
Loaded rule DontNestJsfInJstlIteration
Loaded rule InefficientEmptyStringCheck
Loaded rule AvoidThreadGroup
Loaded rule UnsynchronizedStaticDateFormatter
Loaded rule NoInlineStyleInformation
Loaded rule SimplifyBooleanAssertion
Loaded rule NoScriptlets
Loaded rule NoJspForward
Loaded rule NoLongScripts
Loaded rule NoClassAttribute
Loaded rule NoHtmlComments
Just plug in "35" or "34" to see the new rules for previous releases.
And of course there are many bugfixes and improvements - a memory leak has gone away, the JavaCC-generated parser handles more JDK 1.5 edge cases, UseIndexOfChar now catches more cases, AvoidCallingFinalize was rewritten in Java, and much more. You can see all the details in the changelog, and you can download PMD 3.6 here. Share and Enjoy!
Using PMD? Get the book, "PMD Applied"!