Credits

Committers

  • David Dixon-Peugh - much of the early work on the grammar, initial Emacs plugin
  • David Craine - JBuilder plugin
  • Philippe Herlin - Eclipse plugin, fixed bugs in RuleSetFactory
  • Nascif Abousalh Neto - Emacs plugin
  • Tom Copeland - lead developer, JDeveloper plugin, initial Gel plugin, initial jEdit plugin, IDEAJ integration
  • Jiger Patel - jEdit plugin
  • Gunnlaugur Thor Briem - NetBeans plugin, Maven build script fixes, bug report on JavaCC parser's use of java.lang.Error
  • Ole-Martin Mork - NetBeans plugin
  • Andrei Lumianski - Gel plugin
  • Brant Langer Gurganus - JCreator integration, Swing GUI work
  • Miguel Griffa - over a dozen rules, lots of documentation, and other improvements all over the place

Committers emeritus

  • Tom Burke - Eclipse plugin
  • Alex Chaffee - various bugfixes and features
  • Siegfried Goeschl - original Maven plugin, various bugfixes and features
  • Don Leckie - The PMD GUI
  • Rich Kilmer - logo design
  • Paul Kendall - various bugfixes and features

Significant contributors

  • Raik Schroeder - data flow analyis layer, YAHTMLRenderer
  • Steve Hawkins - rewrite of CPD based on Karp-Rabin string matching
  • Dan Sheppard - XPath engine integration concept and implementation
  • Brian Ewins - complete rewrite of CPD based on the Burrows-Wheeler transform

Contributors

  • Oto 'tapik' Buchta - Patched XMLRenderer for UTF8 support
  • Arent-Jan Banck - Reported bug with JDK 1.5 annotation handling
  • Fred Hartman - Reported exact location of bug in TooManyFields, fixed bug in UnnecessaryBooleanAssertion
  • Andriy Rozeluk - Suggestions for improving BooleanInstantiation, UnnecessaryReturn, AvoidDuplicateLiterals RFEs and bug reports, various other RFEs and thoughtful discussions as well
  • Andreas Ehn - Reported bug with JDK 1.5 generics parsing
  • Eric Olander - SingularField, SimplifyConditional fix, UseStringBufferForStringAppends, CollapsibleIfStatements, AvoidInstanceofChecksInCatchClause, AssignmentToNonFinalStatic rule, nice patch for DFAPanel cleanup, AvoidProtectedFieldInFinalClass, ImmutableFieldRule, noticed missing image in Postfix nodes
  • Tomas Gustavsson - reported pmd-web breakage
  • Tom Parker - AvoidInstantiatingObjectsInLoops bug report, AtLeastOneConstructor bug report
  • Payal Subhash - Tweaks to CSVRenderer
  • Wouter Zelle - initial implementation of SimplifyConditional
  • Christophe Mourette - Reported JDK 1.3 problem with XMLRenderer
  • Wim Deblauwe - SystemPrintln bug report, helped get Ant task and CLI squared away with JDK 1.5 params, JDK 1.5-specific bug reports, suggested improvements for ExceptionSignatureDeclaration
  • Alex Givant - caught documentation bug
  • Luke Francl - suggested UnnecessaryParentheses rule, numerous high quality feature suggestions and bug reports
  • David Hovemeyer - reported missing labelled stmt images, a nice patch to let PMD process code in jar/zip files
  • Peter 'Bruno' Kofler - reported bug #1146116 for JUnitTestsShouldIncludeAssert
  • Zev Blut - nice patch to add Ruby support to CPD
  • Benoit Xhenseval - many bug reports (with good failure cases!), Ant task patch and bug report, XSLT patch, suggestion for improving XML report
  • Christopher Judd - a nice patch to the XSLT that adds a summary
  • John Meagher - suggested the rule 'MissingSerialVersionUID' and provided the implementation for it
  • Bruno Juillet - patch for Ant task's excludeMarker attribute, bug report on ruleset overrides
  • Elliotte Rusty Harold - suggestion for improving command line interface, mispeling report, suggestion for improving Designer startup script, "how to make a ruleset" documentation suggestions, noticed outdated Xerces jars, script renaming suggestions, UseLocaleWithCaseConversions rule suggestion
  • John Austin - patch to fix mispeling in Eclipse plugin message
  • Paddy Fagan - reported bug in StatisticalRule
  • Leszek Migdal - reported documentation mistake for Eclipse plugin
  • Hakan Civelek - an order-of-magnitude optimization to the SystemOutPrintln rule
  • George Sexton - Suggested new rule for Additional String Concatenation Warnings in StringBuffer.
  • John Heintz - Added "any language" support to CPD.
  • Harald Gurres - cleaned up the symbol table code with a very nice patch
  • Matthias Kerkhoff - CPD suggestions, several bug reports
  • Chris Riesbeck - identified some dead code in RuleSet
  • Jörn Stampehl - bug report on JUnitTestsShouldContainAsserts
  • Lars Gregori - reported a bug in the Ant task docs
  • Olaf Heimburger - reported a possible NPE in ReportTree
  • Ryan Gustafson - patch to add "ref" overrides to RuleSetFactory, patch to fix JDK 1.3 incompatibilities in PMD 2.0
  • Jörn Stampehl - bug report
  • Todd Wright - reported bug in EmptyStatementNotInLoop, XPath port of AtLeastOneConstructorRule, ConfusingTernaryExpression rule, reported missing ASTUnaryExpressionNotPlusMinus nodes
  • Conrad Roche - UnusedModifier bug report, other bug reports
  • Mike Thome - NOPMD implementation concept, BadComparisonRule suggestion
  • Ken Foskey - C++ parser bug report, cpd.sh
  • ehowe - a nice patch to include rule priority in the XML report
  • aryanto - reported a broken reference in the 'favorites' ruleset.
  • Archimedes Trajano - suggested SimpleDateFormatNeedsLocale
  • Joerg Kurt Wegner - bug report for UnusedLocalVariable
  • Bruno - SuspiciousEqualsMethodName
  • Ernst Reissner - suggested InstantiationToGetClass, bug reports for UnusedPrivateField/CloseConnectionRule/ConstructorCallsOverridableMethodRule, and bug report and documentation suggestions for UseSingletonRule
  • Philippe Couton - bug report for ExceptionAsFlowControl, OverrideBothEqualsAndHashcodeRule bug report, UseSingletonRule improvements, JUnitStaticSuiteRule improvements
  • Dave Brosius - a couple of nice patches to clean up some string handling inefficiencies, non-static class usages, and unclosed streams/readers - found with Findbugs, I daresay :-)
  • Paul Rowe - suggestion for improving MethodWithSameNameAsEnclosingClass, bug reports for SimplifyBooleanExpressions and UnusedLocalVariable
  • Enno Derksen - enhancements to VariableNamingConventionsRule
  • Michael Haggerty - bug reports for FinalizeDoesNotCallSuperFinalize and UnusedModifier
  • Phil Shaw - documentation suggestions
  • Sreenivasa Viswanadha - reminded me to use BufferedInputStreams, grammar cleanup for Ctrl-Z problem
  • Austin Moore - Integration with Omnicore's CodeGuide IDE
  • Noel Grandin - EqualsNull rule, bug report for IfElseStmtsMustUseBracesRule
  • Matt Inger - CloneMethodMustImplementCloneable, CloneThrowsCloneNotSupportedException
  • Morgan Schweers - Javascript highlighter for the PMD scoreboard
  • Brandon Franklin - bug report for BeanMembersShouldSerializeRule, many PMD scoreboard ideas
  • Radim Kubacki - OptimizableToArrayCallRule suggestion, bug reports, pmd-netbeans feedback
  • Will Sargent - AvoidThrowingCertainExceptionTypesRule, AvoidCatchingNPERule, ExceptionAsFlowControlRule, URL updates for 'Similar projects' page
  • Bertrand Mollinier Toublet - Bug report which led to platform character set encoding enhancement
  • Choi Ki Soo - Found bug in XMLRenderer
  • wedemann - Found bug in RuleSetFactory XPath message variable plugging
  • Lori Olson - Found copy/paste bug in rule descriptions
  • Adrian Papari - Wrote the PapariTextRenderer
  • Curt Cox - some additions to the 'Similar Projects' page
  • Michael Griffel - bug fix for XMLRenderer
  • Doug Tillman - correction to finalizers.xml examples
  • Luis Alberto Domínguez Ruiz - bug report for IfElseStmtsMustUseBracesRule
  • Chad Loder - SuspiciousOctalEscapeRule, EmptyStatementNotInLoop, SuspiciousHashcodeMethodName, NonCaseLabelInSwitchStatement, DefaultLabelNotLastInSwitchStmt, NonStaticInitializer, ExplicitCallToFinalize, MethodWithSameNameAsEnclosingClassRuleTest, FinalizeDoesNotCallSuperFinalize, FinalizeOverloaded, FinalizeOnlyCallsSuperFinalize, UnconditionalIfStatement, AvoidDollarSigns, EmptyStaticInitializer, EmptyFinalizerMethod rule, DontImportSun rule, improvements to ASTBooleanLiteral
  • Maik Schreiber - AccessNode bug report, other bug reports
  • Lokesh Gupta - improvements to the AST viewer
  • Jesse Glick - improvements to VariableNamingConventionsRule, patch for UnusedModifierRule, bug fix for VariableNameDeclarations rule, an excellent discussion on the UnnecessaryConstructorRule
  • Nicolas Liochon - CloneShouldCallSuperCloneRule implementation
  • Slava Pestov - Suggestions for jEdit plugin enhancements.
  • Olivier Mengué - Diagnosed and patched XML report character encoding problems
  • Hariolf Häfele - PMD-JDeveloper plugin bug reports
  • Pieter Bloemendaal - AvoidReassigningParametersRule bug report
  • Vladimir Bossicard - suggested AbstractNamingRule, test package organization suggestions, VBHTMLRenderer, numerous feature requests and bug reports, several rule suggestions derived from JUnit-Addons, evangelism :-)
  • Ken Foskey - noticed bad link
  • Stephan Janssen - promoted PMD for JJGuidelines
  • Ron Sidi - bug reports
  • David Koontz - suggestions for tweaking PMD command line options
  • Jeff Epstein - TextPad integration and tests
  • Gabe Johnson - CloseConnectionRule
  • Roelof Vuurboom - posted report of QStudio analysis of PMD
  • Jeff Anderson - node finding utility code
  • Boris Gruschko - regression test suites, nifty AST/XPath viewer
  • Trevor Harmon - rewrote XSLT script
  • Vadim Nasardinov - xdocs cleanup, run.sh cleanup
  • Sigiswald Madou - bug report
  • Dan Tullis - bug report
  • George Menhorn - CPD bug reports and suggestions
  • Paul Roebuck - Ant build improvement, several bug reports
  • Jon A. Maxwell - Bug report
  • Erik Lee - Bug report
  • Joerg K. Wegner - PMD scoreboard suggestions
  • Chris Webster - fix (and test) for UnnecessaryConstructorRule, BooleanInstantiation rule
  • Colin Simmonds - detailed bug reports
  • Trond Andersen - AvoidCatchingThrowable, ExceptionSignatureDeclaration, ExceptionTypeChecking
  • Bernd Jansen - grammer modification
  • Jarle Naess - bug report
  • Jeff Anderson - VariableNamingConventionsRule, MethodNamingConventionsRule, ClassNamingConventionsRule
  • Frank van Puffelen - documentation suggestions
  • mcclain looney - patch for CPD GUI, bug reports
  • Ralf Hauser - Various documentation suggestions, cygwin-run.sh
  • Pablo Casado - Bug report for UseSingletonRule
  • Nicolai Czempin - Various rule suggestions, additional PMD backronyms
  • Frank Hardisty - BeanMembersShouldSerializeRule
  • Randall Schulz - bug report for LooseCouplingRule
  • Wim Bervoets - bug report for the PMD Ant task
  • Niels Peter Strandberg - various tweaks to the PMD Swing UI
  • Ian Shef - documentation updates, bug reports on the Gel IDE plugin
  • Astro Jetson Jr - a tweak for the ShortVariableNameRule
  • Paul King - a complete rewrite of the Gel plugin
  • Gael Marziou - "exclude" rule feature request, bug reports
  • Philippe T'Seyen - refactoring and cleanup of the CPD Ant task, an XML renderer (with unit tests!) for CPD
  • Michael Montuori - bug reports on the Gel IDE plugin
  • Michael Hosier - bug reports on the Gel IDE plugin
  • Matthew Harrah - script bug report
  • Richard Jenson - CPD on Win32 troubleshooting
  • Daniel Bruguier - CPD on Win32 troubleshooting
  • Mario Claerhout - CPD optimizations and suggestions
  • Sameer Nanda - CPD Ant task bug report
  • Nanne Baars - grammar suggestions, rule suggestions
  • Adam Nemeth - bug fixes for UnnecessaryConstructorRule
  • Andrew Glover - the CPDTask, ExcessivePublicCountRule, CouplingBetweenObjectsRule, ExcessiveImportsRule, documentation tweaks
  • Robert Leland - bug report
  • Carl Gilbert - AccessorClassGenerationRule, DoubleCheckedLockingRule, ConstructorCallsOverridableMethodRule, bug reports, feature requests, and documentation improvements
  • Dave Fuller - improved resource loading code (packaged in a nice diff, too!)
  • David Whitmore - parser bug report
  • David Campbell - detailed bugs reports, Ant task refactoring, documentation tweaks
  • Michael Sutherland - bug report in IfStmtMustUseBracesRule
  • Egon Willighagen - PMD scoreboard suggestion
  • Didier Duquennoy - pmd-netbeans feedback
  • Adam Nemeth - bug report on missing final attribute for local variable declarations
  • Frederic Harper - bug report and subsequent troubleshooting
  • Mats Henricson - an XSLT script and several bug reports
  • Martin Cooper - feature suggestions
  • Bruce Mayhew - feedback on the jEdit plugin
  • Juergen Ebert - feature suggestions and pmd-netbeans feedback
  • J.D. Fagan - feature suggestions
  • William McArthur - ForLoopShouldBeWhileLoop rule
  • Ales Bukovsky - pmd-netbeans feedback
  • Stefan Bodewig - bug report
  • Paul Kendall - enhanced EmptyCatchBlock rule
  • Sean Sullivan - rule suggestions
  • Dale Vissar - rule suggestions
  • Alina Copeland - PMD scoreboard formulas, pmd-dcpd optimizations
  • Vincent Massol - bug reports, design suggestions, feature suggestions, Maven guidance
  • Peter Donald - design suggestions
  • Liam Holohan - bug reports
  • Ralph Schaer - bug reports and verification
  • Damian O'Neill - Ant task patches

Organizations

DARPA for funding the Ultra*Log and Cougaar effort which spawned PMD.
SourceForge for providing hosting services for PMD.
RefactorIT for letting their software be used free-of-charge on PMD code (OpenSource Community License)
QA-Systems for sending in some handy utilities for PMD and shipping PMD inside their QStudio product
Vanward Technologies for using PMD inside their Convergence product