PMD 4.0 rc1 is out! There are nine new rules, most of them in the J2EE ruleset thanks to Romain Pelisse. The XPath rules are much faster thanks to a "rule chaining" optimization implemented by Ryan Gustafson and Xavier Le Vourch. CPD now supports an "encoding" parameter, several more Java 1.5 parsing issues were cleaned up (writing a JavaCC book helps with that sort of thing), and PMD now uses less memory. Here's the download and here are the release notes.
As far as PMD internals go, I'm happy to report that we're on Java 1.5 now, so lots of casts and other such cruft are gone from the PMD source code and have been replaced with generics and such. And we're using JUnit 4 now, which is quite nice. Props to Xavier Le Vourch for spearheading this effort, and for writing RetroWeaver so that folks who don't have a Java 1.5 runtime available can still use PMD.
Using PMD? Get the PMD book!