Looking for the latest version? Download pmd-bin-5.1.3.zip (23.2 MB)
Home / pmd / 5.0.2
Name Modified Size Downloads / Week Status
Parent folder
Totals: 3 Items   37.1 MB 61
pmd-src-5.0.2.zip 2013-02-03 19.4 MB 11 weekly downloads
pmd-bin-5.0.2.zip 2013-02-03 17.6 MB 5959 weekly downloads
ReadMe.txt 2013-02-03 113.7 kB 11 weekly downloads
February 3, 2013 - 5.0.2: Fixed bug 878: False positive: UnusedFormalParameter for abstract methods Fixed bug 913: SignatureDeclareThrowsException is raised twice Fixed bug 947: CloseResource rule fails if field is marked with annotation Fixed bug 1004: targetjdk isn't attribute of PMD task Fixed bug 1007: Parse Exception with annotation Fixed bug 1011: CloseResource Rule ignores Constructors Fixed bug 1012: False positive: Useless parentheses. Fixed bug 1020: Parsing Error Fixed bug 1026: PMD doesn't handle 'value =' in SuppressWarnings annotation Fixed bug 1028: False-positive: Compare objects with equals for Enums Fixed bug 1030: CPD Java.lang.IndexOutOfBoundsException: Index: Fixed bug 1037: Facing a showstopper issue in PMD Report Class (report listeners) Fixed bug 1039: pmd-nicerhtml.xsl is packaged in wrong location Fixed bug 1043: node.getEndLine() always returns 0 (ECMAscript) Fixed bug 1044: Unknown option: -excludemarker Fixed bug 1046: ant task CPDTask doesn't accept ecmascript Fixed bug 1047: False Positive in 'for' loops for LocalVariableCouldBeFinal in 5.0.1 Fixed bug 1048: CommentContent Rule, String Index out of range Exception Fixed bug 1049: Errors in "How to write a rule" Fixed bug 1055: Please add a colon in the ant output after line,column for Oracle JDeveloper IDE usage Fixed bug 1056: "Error while processing" while running on xml file with DOCTYPE reference Fixed bug 1060: GodClassRule >>> wrong method November 28, 2012 - 5.0.1: Fixed bug 820: False+ AvoidReassigningParameters Fixed bug 1008: pmd-5.0.0: ImmutableField false positive on self-inc/dec Fixed bug 1009: pmd-5.0.0: False + UselessParentheses Fixed bug 1003: newline characters stripped from CPD data in PMD 5.0.0 Fixed bug 1001: InsufficientStringBufferDeclaration fails to parse hex Fixed bug 522: InefficientStringBuffering bug false + Fixed bug 953: String.InefficientStringBuffering false + Fixed bug 981: Unable to parse Fixed bug 1010: pmd: parsing of generic method call with super fails Fixed bug 996: pmd-4.2.6: MissingBreakInSwitch fails to report violation Fixed bug 993: Invalid NPath calculation in return statement. Thanks to Prabhjot Singh for the patch. Fixed bug 1023: c/c++ \ as a continuation character not supported Fixed bug 1033: False+ : SingularField Fixed bug 1025: Regression of Crash in PMDTask due to multithreading (Eclipse and Java 1.5) Fixed bug 1017: Type resolution very slow for big project. Thanks to Roman for the patch. Fixed bug 1036: Documentation: default threshold values removed from v5.0 Fixed bug 1035: UseObjectForClearerAPI has misspelled message Fixed bug 1031: false DontImportJavaLang Fixed bug 1034: UseConcurrentHashMap flags calls to methods that return Map Fixed bug 1006: Problem with implementation of getPackageNameImage method Fixed bug 1014: AvoidLiteralsInIfCondition must NOT consider null Fixed bug 1013: jnlp link for CPD is wrong PMD Command Line Changes: Improved command line interface (CLI) parsing using JCommander. Note: this breaks compatibility, but should be easy to fix. With "-d" you specify nowtThe source files / source directory to be scanned. With "-f" you select the report format (like text, html, ...) With "-R" you select the rulesets to be used. Example: pmd -d c:\data\pmd\pmd\test-data\Unused1.java -f xml -R rulesets/java/unusedcode.xml Improved JSP parser to be less strict with not valid XML documents (like HTML). Thanks to Victor Bucutea. Fixed bgastviewer not working. Thanks to Victor Bucutea. Improved CPD: Support in CPD for IgnoreAnnotations and SuppressWarnings("CPD-START"). Thanks to Matthew Short. Fixed C# support for CPD - thanks to TIOBE Software. New Ecmascript rules: Basic ruleset: AvoidTrailingComma May, 1, 2012 - 5.0.0: Fixed bug 3515487: Inconsistent reference to ruleset file in documentation Fixed bug 3470274: Using Label for lines in XMLRenderer Fixed bug 3175710: NPE in InsufficientStringBufferDeclaration CPD: - Exit with status code 4 when CPD detects code duplication (Patch ID: 3497021) January 31, 2012 - 5.0-alpha: This version of PMD breaks API compatibility with prior versions of PMD, as well as RuleSet XML compatibility. Also the maven coordinates (groupId) have been changed. The decision to break compatibility, allows PMD internals and code organization to be improved to better handle additional languages. This opportunity was used to remove depreciated APIs, and beat up any code which has thumbed its nose at the developers over the years. ;) The following is relatively complete list of the major changes (this may not be 100% accurate, see actual source code when in doubt): Fixed bug (no number) - Fixed UseStringBufferLengthRule only worked once per class All StringBuffer-related rules now also catch StringBuilder-related issues in the same way API Change - Unification of treatment of languages within PMD core: Added - net.sourceforge.pmd.lang.Language (now an 'enum') Added - net.sourceforge.pmd.lang.LanguageVersion Added - net.sourceforge.pmd.lang.LanguageVersionDiscoverer Added - net.sourceforge.pmd.lang.LanguageVersionHandler Added - net.sourceforge.pmd.lang.XPathHandler Added - net.sourceforge.pmd.lang.ast.xpath.AbstractASTXPathHandler Added - net.sourceforge.pmd.lang.xpath.Initializer Added - net.sourceforge.pmd.lang.ast.AbstractTokenManager Added - net.sourceforge.pmd.lang.ast.CharStream Added - net.sourceforge.pmd.lang.ast.JavaCharStream Added - net.sourceforge.pmd.lang.ast.SimpleCharStream Added - net.sourceforge.pmd.lang.ast.TokenMgrError Added - net.sourceforge.pmd.lang.rule.stat.StatisticalRule Added - net.sourceforge.pmd.lang.rule.stat.StatisticalRuleHelper Added - net.sourceforge.pmd.lang.java.rule.AbstractStatisticalJavaRule Added - net.sourceforge.pmd.lang.rule.AbstractRuleViolationFactory Added - net.sourceforge.pmd.lang.rule.RuleViolationFactory Added - net.sourceforge.pmd.lang.java.rule.JavaRuleViolationFactory Added - net.sourceforge.pmd.lang.jsp.rule.JspRuleViolationFactory Renamed - net.sourceforge.pmd.AbstractRule to net.sourceforge.pmd.lang.rule.AbstractRule Renamed - net.sourceforge.pmd.AbstractJavaRule to net.sourceforge.pmd.lang.java.rule.AbstractJavaRule Renamed - net.sourceforge.pmd.AbstractRuleChainVisitor to net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor Renamed - net.sourceforge.pmd.RuleChainVisitor to net.sourceforge.pmd.lang.rule.RuleChainVisitor Renamed - net.sourceforge.pmd.SourceFileSelector to net.sourceforge.pmd.lang.rule.LanguageFilenameFilter Renamed - net.sourceforge.pmd.rule.XPathRule to net.sourceforge.pmd.lang.rule.XPathRule Renamed - net.sourceforge.pmd.jsp.rule.AbstractJspRule to net.sourceforge.pmd.lang.jsp.rule.AbstractJspRule Renamed - net.sourceforge.pmd.ast.CompilationUnit to net.sourceforge.pmd.lang.ast.RootNode Renamed - net.sourceforge.pmd.ast.JavaRuleChainVisitor to net.sourceforge.pmd.lang.java.rule.JavaRuleChainVisitor Renamed - net.sourceforge.pmd.jsp.ast.JspRuleChainVisitor to net.sourceforge.pmd.lang.jsp.rule.JspRuleChainVisitor Renamed - net.sourceforge.pmd.parser.Parser to net.sourceforge.pmd.lang.Parser Renamed - net.sourceforge.pmd.parser.TokenManager to net.sourceforge.pmd.lang.TokenManager Renamed - net.sourceforge.pmd.parser.* into net.sourceforge.pmd.lang.{Language} Renamed - net.sourceforge.pmd.sourcetypehandlers.SourceTypeHandler to net.sourceforge.pmd.lang.LanguageVersionHandler Renamed - net.sourceforge.pmd.sourcetypehandlers.VisitorStarter to net.sourceforge.pmd.lang.VisitorStarter Renamed - net.sourceforge.pmd.sourcetypehandlers.* into net.sourceforge.pmd.lang.{Language} Renamed - net.sourceforge.pmd.stat.StatisticalRule to net.sourceforge.pmd.lang.rule.StatisticalRuleHelper Renamed - net.sourceforge.pmd.jaxen.TypeOfFunction to net.sourceforge.pmd.lang.java.xpath.TypeOfFunction Renamed - net.sourceforge.pmd.jaxen.MatchesFunction to net.sourceforge.pmd.lang.xpath.MatchesFunction Renamed - net.sourceforge.pmd.jaxen.Attribute to net.sourceforge.pmd.lang.ast.xpath.Attribute Renamed - net.sourceforge.pmd.jaxen.AttributeAxisIterator to net.sourceforge.pmd.lang.ast.xpath.AttributeAxisIterator Renamed - net.sourceforge.pmd.jaxen.DocumentNavigator to net.sourceforge.pmd.lang.ast.xpath.DocumentNavigator Renamed - net.sourceforge.pmd.jaxen.NodeIterator to net.sourceforge.pmd.lang.ast.xpath.NodeIterator Renamed - net.sourceforge.pmd.ast.* into net.sourceforge.pmd.lang.java.ast.* Renamed - net.sourceforge.pmd.rules.* into net.sourceforge.pmd.lang.java.rule.* and updated to follow conventions Renamed - net.sourceforge.pmd.jsp.ast.* into net.sourceforge.pmd.lang.jsp.ast.* Renamed - net.sourceforge.pmd.jsp.rules.* into net.sourceforge.pmd.lang.jsp.ast.rule.* and updated to follow conventions Deleted - net.sourceforge.pmd.cpd.cppast.* into net.sourceforge.pmd.lang.cpp.ast.* Deleted - net.sourceforge.pmd.CommonAbstractRule Deleted - net.sourceforge.pmd.SourceFileConstants Deleted - net.sourceforge.pmd.SourceType Deleted - net.sourceforge.pmd.SourceTypeDiscoverer Deleted - net.sourceforge.pmd.SourceTypeToRuleLanguageMapper Deleted - net.sourceforge.pmd.TargetJDK1_3 Deleted - net.sourceforge.pmd.TargetJDK1_4 Deleted - net.sourceforge.pmd.TargetJDK1_5 Deleted - net.sourceforge.pmd.TargetJDK1_6 Deleted - net.sourceforge.pmd.TargetJDK1_7 Deleted - net.sourceforge.pmd.TargetJDKVersion Deleted - net.sourceforge.pmd.cpd.SourceFileOrDirectoryFilter Deleted - net.sourceforge.pmd.sourcetypehandlers.SourceTypeHandlerBroker Deleted - net.sourceforge.pmd.ast.JavaCharStream Deleted - net.sourceforge.pmd.ast.CharStream Deleted - net.sourceforge.pmd.ast.TokenMgrError Deleted - net.sourceforge.pmd.jsp.ast.JspCharStream Deleted - net.sourceforge.pmd.jsp.ast.TokenMgrError API Change - Generalize RuleViolation treatment Renamed - net.sourceforge.pmd.IRuleViolation to net.sourceforge.pmd.RuleViolation Renamed - net.sourceforge.pmd.RuleViolation to net.sourceforge.pmd.lang.rule.AbstractRuleViolation Added - net.sourceforge.pmd.RuleViolationComparator Added - net.sourceforge.pmd.lang.java.rule.JavaRuleViolation Added - net.sourceforge.pmd.lang.jsp.rule.JspRuleViolation API Change - Generalize DFA treatment Renamed - net.sourceforge.pmd.dfa.IDataFlowNode to net.sourceforge.pmd.lang.dfa.DataFlowNode Renamed - net.sourceforge.pmd.dfa.DataFlowNode to net.sourceforge.pmd.lang.dfa.AbstractDataFlowNode Renamed - net.sourceforge.pmd.dfa.Linker to net.sourceforge.pmd.lang.dfa.Linker Renamed - net.sourceforge.pmd.dfa.LinkerException to net.sourceforge.pmd.lang.dfa.LinkerException Renamed - net.sourceforge.pmd.dfa.NodeType to net.sourceforge.pmd.lang.dfa.NodeType Renamed - net.sourceforge.pmd.dfa.StackObject to net.sourceforge.pmd.lang.dfa.StackObject Renamed - net.sourceforge.pmd.dfa.SequenceChecker to net.sourceforge.pmd.lang.dfa.SequenceChecker Renamed - net.sourceforge.pmd.dfa.SequenceException to net.sourceforge.pmd.lang.dfa.SequenceException Renamed - net.sourceforge.pmd.dfa.StartOrEndDataFlowNode to net.sourceforge.pmd.lang.dfa.StartOrEndDataFlowNode Renamed - net.sourceforge.pmd.dfa.Structure to net.sourceforge.pmd.lang.dfa.Structure Renamed - net.sourceforge.pmd.dfa.variableaccess.VariableAccess to net.sourceforge.pmd.lang.dfa.VariableAccess Renamed - net.sourceforge.pmd.dfa.variableaccess.VariableAccessException to net.sourceforge.pmd.lang.dfa.VariableAccessException Renamed - net.sourceforge.pmd.dfa.pathfinder.* to net.sourceforge.pmd.lang.dfa.pathfinder.* Renamed - net.sourceforge.pmd.dfa.report.* to net.sourceforge.pmd.lang.dfa.report.* Renamed - net.sourceforge.pmd.dfa.DaaRuleViolation to net.sourceforge.pmd.lang.java.dfa.DaaRuleViolation Renamed - net.sourceforge.pmd.dfa.DataFlowFacade to net.sourceforge.pmd.lang.java.dfa.DataFlowFacade Renamed - net.sourceforge.pmd.dfa.StatementAndBraceFinder to net.sourceforge.pmd.lang.java.dfa.StatementAndBraceFinder Renamed - net.sourceforge.pmd.dfa.variableaccess.VariableAccessVisitor to net.sourceforge.pmd.lang.java.dfa.VariableAccessVisitor Added - net.sourceforge.pmd.lang.java.dfa.JavaDataFlowNode Added - net.sourceforge.pmd.lang.DataFlowHandler API Change - Generalize Symbol Table treatement Deleted - net.sourceforge.pmd.symboltable.JspSymbolFacade Deleted - net.sourceforge.pmd.symboltable.JspScopeAndDeclarationFinder Renamed - net.sourceforge.pmd.symboltable.* to net.sourceforge.pmd.lang.java.symboltable.* API Change - Generalize Type Resolution treatment Renamed - net.sourceforge.pmd.typeresolution.* to net.sourceforge.pmd.lang.java.typeresolution.* API Change - Generalize Property Descriptor treatment Renamed - net.sourceforge.pmd.properties.* to net.sourceforge.pmd.lang.rule.properties.* Renamed - net.sourceforge.pmd.properties.AbstractPMDProperty to net.sourceforge.pmd.lang.rule.properties.AbstractProperty Changed - net.sourceforge.pmd.properties.PropertyDescriptor to use Generics, and other changes Added - net.sourceforge.pmd.lang.rule.properties.* new types and other API changes API Change - Generalize AST treatment Added - net.sourceforge.pmd.lang.ast.Node (interface extracted from old Node/SimpleNode) Added - net.sourceforge.pmd.lang.ast.AbstractNode Added - net.sourceforge.pmd.ast.DummyJavaNode Added - net.sourceforge.pmd.jsp.ast.AbstractJspNode Added - net.sourceforge.pmd.jsp.ast.JspNode Renamed - net.sourceforge.pmd.ast.SimpleJavaNode to net.sourceforge.pmd.ast.AbstractJavaNode Renamed - net.sourceforge.pmd.ast.SimpleJavaTypeNode to net.sourceforge.pmd.ast.AbstractJavaTypeNode Renamed - net.sourceforge.pmd.ast.SimpleJavaAccessNode to net.sourceforge.pmd.ast.AbstractJavaAccessNode Renamed - net.sourceforge.pmd.ast.SimpleJavaAccessTypeNode to net.sourceforge.pmd.ast.AbstractJavaAccessTypeNode Deleted - net.sourceforge.pmd.ast.Node Deleted - net.sourceforge.pmd.ast.SimpleNode Deleted - net.sourceforge.pmd.ast.AccessNodeInterface Deleted - net.sourceforge.pmd.jsp.ast.Node Deleted - net.sourceforge.pmd.jsp.ast.SimpleNode API Change - General code reorganization/cleanup Renamed - net.sourceforge.pmd.AbstractDelegateRule to net.sourceforge.pmd.lang.rule.AbstractDelegateRule Renamed - net.sourceforge.pmd.MockRule to net.sourceforge.pmd.lang.rule.MockRule Renamed - net.sourceforge.pmd.RuleReference to net.sourceforge.pmd.lang.rule.RuleReference Renamed - net.sourceforge.pmd.ScopedLogHandlersManager to net.sourceforge.pmd.util.log.ScopedLogHandlersManager Renamed - net.sourceforge.pmd.util.AntLogHandler to net.sourceforge.pmd.util.log.AntLogHandler Renamed - net.sourceforge.pmd.util.ConsoleLogHandler to net.sourceforge.pmd.util.log.ConsoleLogHandler Renamed - net.sourceforge.pmd.util.PmdLogFormatter to net.sourceforge.pmd.util.log.PmdLogFormatter API Change - Changes to Rule/RuleSet/RuleSets Removed - boolean Rule.include() Removed - void Rule.setInclude(boolean) Removed - String Rule.getRulePriorityName() Removed - String Rule.getExample() Removed - Rule.LOWEST_PRIORITY Removed - Rule.PRIORITIES Removed - Properties Rule.getProperties() Removed - Rule.addProperties(Properties) Removed - boolean Rule.hasProperty(String) Removed - RuleSet.applies(Language,Language) Removed - RuleSet.getLanguage() Removed - RuleSet.setLanguage(Language) Removed - RuleSets.applies(Language,Language) Changed - void Rule.setPriority(int) to void Rule.setPriority(RulePriority) Changed - int Rule.getPriority() to void RulePriority Rule.getPriority() Changed - XXX Rule.getXXXProperty(String) to <T> Rule.getProperty(PropertyDescriptor<T>) Changed - XXX Rule.getXXXProperty(PropertyDescriptor) to <T> Rule.getProperty(PropertyDescriptor<T>) Changed - Rule.addProperty(String, String) to Rule.setProperty(PropertyDescriptor<T>, T) Changed - Rule.setProperty(PropertyDescriptor, Object) to Rule.setProperty(PropertyDescriptor<T>, T) Changed - Rule.setProperty(PropertyDescriptor, Object[]) to Rule.setProperty(PropertyDescriptor<T>, T) Changed - Rule.propertyValuesByDescriptor() to Rule.getPropertiesByPropertyDescriptor() Changed - PropertyDescriptor Rule.propertyDescriptorFor(String) to PropertyDescriptor Rule.getPropertyDescriptor(String) Changed - boolean RuleSet.usesDFA() to boolean RuleSet.usesDFA(Language) Changed - boolean RuleSet.usesTypeResolution() to boolean RuleSet.usesTypeResolution(Language) Added - Rule.setLanguage(Language) Added - Language Rule.getLanguage() Added - Rule.setMinimumLanguageVersion(LanguageVersion) Added - LanguageVersion Rule.getMinimumLanguageVersion() Added - Rule.setMaximumLanguageVersion(LanguageVersion) Added - LanguageVersion Rule.getMaximumLanguageVersion() Added - Rule.setDeprecated(boolean) Added - boolean Rule.isDeprecated() Added - String Rule.dysfunctionReason(); Added - Rule.definePropertyDescriptor(PropertyDescriptor) Added - List<PropertyDescriptor> Rule.getPropertyDescriptors() Added - RuleSet.applies(Rule,LanguageVersion) API Change - Changes to PMD class Renamed - PMD.EXCLUDE_MARKER to PMD.SUPPRESS_MARKER Removed - PMD.processFile(InputStream, RuleSet, RuleContext) Removed - PMD.processFile(InputStream, String, RuleSet, RuleContext) Removed - PMD.processFile(Reader, RuleSet, RuleContext) Removed - PMD.processFile(Reader, RuleSets, RuleContext, LanguageVersion) Moved - PMD.getExcludeMarker() to Configuration.getSuppressMarker() Moved - PMD.setExcludeMarker(String) to Configuration.getSuppressMarker(String) Moved - PMD.getClassLoader() to Configuration.getClassLoader() Moved - PMD.setClassLoader(ClassLoader) to Configuration.getClassLoader(ClassLoader) Moved - PMD.setDefaultLanguageVersion(LanguageVersion) to Configuration.setDefaultLanguageVersion(LanguageVersion) Moved - PMD.setDefaultLanguageVersions(List<LanguageVersion>) to Configuration.setDefaultLanguageVersions(List<LanguageVersion>) Moved - PMD.createClasspathClassLoader(String) to Configuration.createClasspathClassLoader(String) API Change - Changes to Node interface Renamed - Node.findChildrenOfType(Class) as Node.findDescendantsOfType(Class) Renamed - Node.getFirstChildOfType(Class) as Node.getFirstDescendantOfType(Class) Renamed - Node.containsChildOfType(Class) as Node.hasDescendantOfType(Class) Renamed - Node.getAsXml() as Node.getAsDocument() Added - Node.findChildrenOfType(Class), non recursive version Added - Node.getFirstChildOfType(Class), non recursive version API Change - Remove deprecated APIs Removed - AccessNode.setXXX() methods, use AccessNode.setXXX(boolean) instead. Removed - PMDException.getReason() Removed - RuleSetFactory.createRuleSet(String,ClassLoader), use RuleSetFactory.setClassLoader(ClassLoader) and RuleSetFactory.createRuleSets(String) instead. Removed - net.sourceforge.pmd.cpd.FileFinder use net.sourceforge.pmd.util.FileFinder instead. API Change - RuleSetFactory Added - RuleSetFactory.setClassLoader(ClassLoader) Added - RuleSetFactory.createRuleSets(List<RuleSetReferenceId>) Added - RuleSetFactory.createRuleSet(RuleSetReferenceId) Added - RuleSetFactory.setClassLoader(ClassLoader) Added - RuleSetReferenceId class to handle parsing of RuleSet strings, see RuleSetReferenceId.parse(String) Renamed - RuleSetFactory.createSingleRuleSet(String) to RuleSetFactory.createRuleSet(String); Removed - RuleSetFactory.createRuleSets(String, ClassLoader), use RuleSetFactory.createRuleSets(String) instead. Removed - RuleSetFactory.createSingleRuleSet(String, ClassLoader), use RuleSetFactory.createSingleRuleSet(String) instead. Removed - RuleSetFactory.createRuleSet(InputStream, ClassLoader), use RuleSetFactory.createRuleSet(RuleSetReferenceId) instead. Removed - ExternalRuleID, use RuleSetReferenceId instead Removed - SimpleRuleSetNameMapper, use RuleSetReferenceId instead API Change - Changes to Renderer class, and Renderer implementations Added - Renderer.getName() Added - Renderer.setName(String) Added - Renderer.getDescription() Added - Renderer.setDescription(String) Added - Renderer.getPropertyDefinitions() Added - Renderer.isShowSuppressedViolations() Added - AbstractAccumulatingRenderer Removed - Renderer.render(Report) Removed - Renderer.render(Report, Writer) Renamed - Renderer.showSuppressedViolations(boolean) to Renderer.setShowSuppressedViolations(boolean) Renamed - PapariTextRenderer to TextColorRenderer Renamed - OntheFlyRenderer to AbstractIncrementingRenderer PMD command line changes: Removed -lineprefix use -property linePrefix {value} instead Removed -linkprefix use -property linkPrefix {value} instead Removed -xslt use -property xsltFilename {value} instead Removed -nojsp now obsolete Removed -targetjdk use -version {name} {version} instead Added -version {name} {version} to set language version to use for a given language Added -property {name} {value} as generic way to pass properties to Renderers Added -showsuppressed as a means to show suppressed rule violations (consistent with Ant task behavior) Renamed 'nicehtml' report to 'xslt' Renamed 'papari' report to 'textcolor' Renamed -excludemarker option to -suppressmarker Renamed -cpus option to -threads Ant changes: Removed - <formatter> 'linkPrefix' attribute, use <param name="linkPrefix"> instead Removed - <formatter> 'linePrefix' attribute, use <param name="linePrefix"> instead Changed - <formatter> is optional - if not specified, falls back to "text" and console output. Removed - <pmd> 'targetJDK' attribute to <version>lang version</version> instead Added - <param name="name" value="value"/> as generic way to pass properties to Renderers on <formatter> Renamed - <pmd> 'excludeMarker' attribute to 'suppressMarker' Renamed - <pmd> 'cpus' attribute to 'threads' Maven changes: The new maven coordinates are: net.sourceforge.pmd:pmd, e.g. <dependency> <groupId>net.sourceforge.pmd</groupId> <artifactId>pmd</artifactId> <version>5.0</version> </dependency> New features: New Language 'ecmascript' added, for writing XPathRule and Java Rules against ECMAScript/JavaScript documents (must be standalone, not embedded in HTML). Many thanks to Rhino! New Language 'xml' added, for writing XPathRules against XML documents New Language 'xsl' added, as a derivative from XML. Rules can now define a 'violationSuppressRegex' property to universally suppress violations with messages matching the given regular expression Rules can now define a 'violationSuppressXPath' property to universally suppress violations on nodes which match the given relative XPath expression Rules are now directly associated with a corresponding Language, and a can also be associated with a specific Language Version range if desired. Rules can now be flagged with deprecated='true' in the RuleSet XML to allow the PMD Project to indicate a Rule (1) is scheduled for removal, (2) has been removed, or (3) has been renamed/moved. XPathRules can now query using XPath 2.0 with 'version=2.0"', or XPath 2.0 in XPath 1.0 compatibility mode using 'version="1.0 compatibility"'. Many thanks to Saxon! Rules can now use property values in messages, for example ${propertyName} will expand to the value of the 'propertyName' property on the Rule. Rules can now use violation specific values in messages, specifically ${variableName}, ${methodName}, ${className}, ${packageName}. New XPath function 'getCommentOn' can be used to search for strings in comments - Thanks to Andy Throgmorton CPD: Add .hxx and .hpp as valid file extension for CPD - Thanks to Ryan Pavlik Add options to to the CPD command line task - Thanks to Cd-Man Add C# support for CPD - thanks to Florian Bauer Fix small bug in Rule Designer UI Performance enhacement when parsing Javadoc (Patch ID: 3217201), thanks to Cd-Man Rework the XMLRenderer to use proper XML API and strictly uses the system value for encoding (Fix bug: 1435751) Other changes: Rule property API upgrades: All numeric property descriptors can specify upper & lower limits Newly functional Method & Type descriptors allow rule developers to incorporate/watch for individual methods or types Better initialization error detection Deprecated old string-keyed property API, will leave some methods behind for XPath rules however '41' and '42' shortcuts for rulesets added The default Java version processed by PMD is now uniformly Java 1.5. RuleViolations in Reports now uses List internally, and RuleViolationComparator is no longer broken TokenManager errors now include a file name whenever possible for every AST in PMD Added file encoding option to CPD GUI, which already existed for the command line and Ant AssignmentInOperand enhanced to catch assignment in 'for' condition, as well as use of increment/decrement operators. Customization properties added to allow assignment in if/while/for, or use of increment/decrement. Fix false positive on CastExpressions for UselessParentheses Fix false positive where StringBuffer.setLength(0) was using default constructor size of 16, instead of actual constructor size. Fix false negative for non-primitive types for VariableNamingConventions, also expanded scope to local and method/constructors, and enhanced customization options to choose between members/locals/parameters (all checked by default) Fix false negative for UseArraysAsList when the array was passed as method parameter - thanks to Andy Throgmorton Improve TooManyMethods rule - thanks to a patch from Riku Nykanen Improve DoNotCallSystemExit - thanks to a patch from Steven Christou Correct -benchmark reporting of Rule visits via the RuleChain Creating an Empty Code Ruleset and moved the following rules from Basic ruleset: * Empty Code Rules * EmptyCatchBlock * EmptyIfStmt * EmptyWhileStmt * EmptyTryBlock * EmptyFinallyBlock * EmptySwitchStatements * EmptySynchronizedBlock * EmptyStatementNotInLoop * EmptyInitializer * EmptyStatementBlock * EmptyStaticInitializer Basic rulesets still includes a reference to those rules. Creating a unnecessary Code Ruleset and moved the following rules from Basic ruleset: * UnnecessaryConversionTemporary * UnnecessaryReturn * UnnecessaryFinalModifier * UselessOverridingMethod * UselessOperationOnImmutable * UnusedNullCheckInEquals * UselessParentheses Basic rulesets still includes a reference to those rules. Fixed bug 2920057 - Fixed False + on CloseResource Fixed bug 1808110 - Fixed performance issues on PreserveStackTrace Fixed bug 2832322 - cpd.xml file tag path attribute should be entity-encoded Fixed bug 2826119 - False +: DoubleCheckedLocking warning with volatile field Fixed bug 2835074 - False -: DoubleCheckedLocking with reversed null check Fixed bug 1932242 - EmptyMethodInAbstractClassShouldBeAbstract false + Fixed bug 1928009 - Error using migration ruleset in PMD 4.2 Fixed bug 1808110 - PreserveStackTrace Fixed bug 1988829 - Violation reported without source file name (actually a fix to ConsecutiveLiteralAppends) Fixed bug 1989814 - false +: ConsecutiveLiteralAppends Fixed bug 1977230 - false positive: UselessOverridingMethod Fixed bug 1998185 - BeanMembersShouldSerialize vs @SuppressWarnings("serial") Fixed bug 2002722 - false + in UseStringBufferForStringAppends Fixed bug 2056318 - False positive for AvoidInstantiatingObjectsInLoops Fixed bug 1977438 - False positive for UselessStringValueOf Fixed bug 2050064 - False + SuspiciousOctalEscape with backslash literal Fixed bug 1556594 - Wonky detection of NullAssignment Fixed bug 1481051 - false + UnusedNullCheckInEquals (and other false positives too) Fixed bug 1943204 - Ant task: <ruleset> path should be relative to Ant basedir Fixed patch 2075906 - Add toString() to the rule UnnecessaryWrapperObjectCreation Fixed bug 2315623 - @SuppressWarnings("PMD.UseSingleton") has no effect Fixed bug 2230809 - False +: ClassWithOnlyPrivateConstructorsShouldBeFinal Fixed bug 2338341 - ArrayIndexOutOfBoundsException in CPD (on Ruby) Fixed bug 2315599 - False +: UseSingleton with class containing constructor Fixed bug 1955852 - false positives for UnusedPrivateMethod & UnusedLocalVariable Fixed bug 2404700 - UseSingleton should not act on enums Fixed bug - JUnitTestsShouldIncludeAssert now detects Junit 4 Assert.assert... constructs Fixed bug 1609038 - Xslt report generators break if path contains "java" Fixed bug 2142986 - UselessOverridingMethod doesn't consider annotations Fixed bug 2027626 - False + : AvoidFinalLocalVariable Fixed bug 2606609 - False "UnusedImports" positive in package-info.java Fixed bug 2645268 - ClassCastException in UselessOperationOnImmutable.getDeclaration Fixed bug 2724653 - AvoidThreadGroup reports false positives Fixed bug 2904832 - Type resolution not working for ASTType when using an inner class Fixed bug 1435751 - XML format does not support UTF-8 Fixed bug 3303811 - Deadlink on "Similar projects" page Fixed bug 3017616 - Updated documentation regarding Netbeans plugin - thanks to Jesse Glick Fixed bug 3427563 - Deprecated class (android.util.config) - thanks to Lukas Reschke for the patch ruleset.dtd and ruleset_xml_schema.xsd added to jar file in rulesets directory bin and java14/bin scripts: retroweaver version was not correct in java14/bin scripts support for extra languages in cpd.sh standard unix scripts can be used with cygwin Upgrading UselessOperationOnImmutable to detect more use cases, especially on String and fix false positives AvoidDuplicateLiteralRule now has 'skipAnnotations' boolean property Fixed false positive in UnusedImports: javadoc comments are parsed to check @see and other tags Fixed parsing bug: constant fields in annotation classes Bug fix: NPE in MoreThanOneLogger UnnecessaryParentheses now checks all expressions, not just return statements UnusedFormalParameter now reports violations on the parameter node, not the method/constructor node Updates to RuleChain to honor RuleSet exclude-pattern Optimizations and false positive fixes in PreserveStackTrace @SuppressWarnings("all") disables all warnings SingularField now checks for multiple fields in the same declaration Java grammar enhanced to include AnnotationMethodDeclaration as parent node of method related children of AnnotationTypeMemberDeclaration JavaCC generated artifacts updated to JavaCC 4.1. Dependencies updates: asm updated to 3.2 Ant requirement is now 1.7.0 or higher for compilation JUnit testing jar is packaged on 1.7.0+ only in ant binary distributions Note that the ant task still works with 1.6.0 and higher All comment types are now stored in ASTCompilationUnit, not just formal ones Fixed false negative in UselessOverridingMethod Fixed handling of escape characters in UseIndexOfChar and AppendCharacterWithChar Fixed ClassCastException on generic method in BeanMembersShouldSerialize Fixed ClassCastException in symbol table code Support for Java 1.4 runtime dropped, PMD now requires Java 5 or higher. PMD can still process Java 1.4 source files. Support for Java 1.7 Text renderer is now silent if there's no violation instead of displaying "No problems found!" RuleSet short names now require a language prefix, 'basic' is now 'java-basic', and 'rulesets/basic.xml' is now 'rulesets/java/basic.xml' The JSP RuleSets are now in the 'jsp' language, and are 'jsp-basic', 'jsp-basic-jsf', 'rulesets/jsp/basic.xml' and 'rulesets/jsp/basic-jsp.xml' Enhanced logging in the ClassTypeResolver to provide more detailed messaging. AvoidUsingHardCodedIP modified to not use InetAddress.getByName(String), instead does better pattern analysis. The JSP/JSF parser can now parse Unicode input. The JSP/JSP parser can now handle <script>...</script> tags. The AST HtmlScript node contains the content. Added Ecmascript as a supported language for CPD. The RuleSet XML Schema namespace is now: http://pmd.sourceforge.net/ruleset/2.0.0 The RuleSet XML Schema is located in the source at: etc/ruleset_2_0_0.xsd The RuleSet DTD is located in the source at: etc/ruleset_2_0_0.dtd Improved include/exclude pattern matching performance for ends-with type patterns. Modify (and hopefully fixed) CPD algorithm thanks to a patch from Juan Jesús García de Soria. Fixed character reference in xml report - thanks to Seko Enhanced SuspiciousEqualsMethodName rule - thanks to Andy Throgmorton Add a script to launch CPDGUI on Unix system - thanks to Tom Wheeler New Java rules: Basic ruleset: ExtendsObject,CheckSkipResult,AvoidBranchingStatementAsLastInLoop,DontCallThreadRun,DontUseFloatTypeForLoopIndices Controversial ruleset: AvoidLiteralsInIfCondition, AvoidPrefixingMethodParameters, OneDeclarationPerLine, UseConcurrentHashMap Coupling ruleset: LoosePackageCoupling,LawofDemeter Design ruleset: LogicInversion,UseVarargs,FieldDeclarationsShouldBeAtStartOfClass,GodClass Empty ruleset: EmptyInitializer,EmptyStatementBlock Import ruleset: UnnecessaryFullyQualifiedName Optimization ruleset: RedundantFieldInitializer Naming ruleset: ShortClassName, GenericsNaming StrictException ruleset: AvoidThrowingNewInstanceOfSameException, AvoidCatchingGenericException, AvoidLosingExceptionInformation Unnecessary ruleset: UselessParentheses JUnit ruleset: JUnitTestContainsTooManyAsserts, UseAssertTrueInsteadOfAssertEquals Logging with Jakarta Commons ruleset: GuardDebugLogging New Java ruleset: android.xml: new rules specific to the Android platform New JSP rules: Basic ruleset: NoInlineScript New ECMAScript rules: Basic ruleset: AssignmentInOperand,ConsistentReturn,InnaccurateNumericLiteral,ScopeForInVariable,UnreachableCode,EqualComparison,GlobalVariable Braces ruleset: ForLoopsMustUseBraces,IfStmtsMustUseBraces,IfElseStmtsMustUseBraces,WhileLoopsMustUseBraces Unnecessary ruleset: UnnecessaryParentheses,UnnecessaryBlock New XML rules: Basic ruleset: MistypedCDATASection November 4, 2011 - 4.3: Add support for Java 7 grammer - thanks to Dinesh Bolkensteyn and SonarSource Add options --ignore-literals and --ignore-identifiers to the CPD command line task, thanks to Cd-Man Fixed character reference in xml report - thanks to Seko Add C# support for CPD - thanks to Florian Bauer Fix small bug in Rule Designer UI Improve TooManyMethods rule - thanks to a patch from Riku Nykanen Improve DoNotCallSystemExit - thanks to a patch from Steven Christou Fix false negative for UseArraysAsList when the array was passed as method parameter - thanks to Andy Throgmorton Enhanced SuspiciousEqualsMethodName rule - thanks to Andy Throgmorton Add a script to launch CPDGUI on Unix system - thanks to Tom Wheeler New Rule: Basic ruleset: DontCallThreadRun - thanks to Andy Throgmorton Logging with Jakarta Commons ruleset: GuardDebugLogging September 14, 2011 - 4.2.6: Fixed bug 2920057 - False + : CloseRessource whith an external getter Fixed bug 1808110 - Fixed performance issue on PreserveStackTrace Fixed bug 2832322 - cpd.xml file tag path attribute should be entity-encoded Fixed bug 2590258 - NPE with nicerhtml output Fixed bug 2317099 - False + in SimplifyCondition Fixed bug 2606609 - False "UnusedImports" positive in package-info.java Fixed bug 2645268 - ClassCastException in UselessOperationOnImmutable.getDeclaration Fixed bug 2724653 - AvoidThreadGroup reports false positives Fixed bug 2835074 - False -: DoubleCheckedLocking with reversed null check Fixed bug 2826119 - False +: DoubleCheckedLocking warning with volatile field Fixed bug 2904832 - Type resolution not working for ASTType when using an inner class Modify (and hopefully fixed) CPD algorithm thanks to a patch from Juan Jesús García de Soria. Correct -benchmark reporting of Rule visits via the RuleChain Fix issue with Type Resolution incorrectly handling of Classes with same name as a java.lang Class. The JSP/JSF parser can now parse Unicode input. The JSP/JSP parser can now handle <script>...</script> tags. The AST HtmlScript node contains the content. Added Ecmascript as a supported language for CPD. Improved include/exclude pattern matching performance for ends-with type patterns. Dependencies updates: asm updated to 3.2 Android ruleset: CallSuperLast rule now also checks for finish() redefinitions New rule: Android: DoNotHardCodeSDCard Controversial : AvoidLiteralsInIfCondition (patch 2591627), UseConcurrentHashMap StrictExceptions : AvoidCatchingGenericException, AvoidLosingExceptionInformation Naming : GenericsNaming JSP: NoInlineScript February 08, 2009 - 4.2.5: Enhanced logging in the ClassTypeResolver to provide more detailed messaging. Fixed bug 2315623 - @SuppressWarnings("PMD.UseSingleton") has no effect Fixed bug 2230809 - False +: ClassWithOnlyPrivateConstructorsShouldBeFinal Fixed bug 2338341 - ArrayIndexOutOfBoundsException in CPD (on Ruby) Fixed bug 2315599 - False +: UseSingleton with class containing constructor Fixed bug 1955852 - false positives for UnusedPrivateMethod & UnusedLocalVariable Fixed bug 2404700 - UseSingleton should not act on enums Fixed bug 2225474 - VariableNamingConventions does not work with nonprimitives Fixed bug 1609038 - Xslt report generators break if path contains "java" Fixed bug - JUnitTestsShouldIncludeAssert now detects Junit 4 Assert.assert... constructs Fixed bug 2142986 - UselessOverridingMethod doesn't consider annotations Fixed bug 2027626 - False + : AvoidFinalLocalVariable New rule: StrictExceptions : AvoidThrowingNewInstanceOfSameException New ruleset: android.xml: new rules specific to the Android platform October 12, 2008 - 4.2.4: Fixed bug 1481051 - false + UnusedNullCheckInEquals (and other false positives too) Fixed bug 1943204 - Ant task: <ruleset> path should be relative to Ant basedir Fixed bug 2139720 - Exception in PMD Rule Designer for inline comments in source Fixed patch 2075906 - Add toString() to the rule UnnecessaryWrapperObjectCreation Fixed ClassCastException on generic method in BeanMembersShouldSerialize Fixed ClassCastException in symbol table code August 31, 2008 - 4.2.3: JavaCC generated artifacts updated to JavaCC 4.1d1. Java grammar enhanced to include AnnotationMethodDeclaration as parent node of method related children of AnnotationTypeMemberDeclaration Fixes for exclude-pattern Updates to RuleChain to honor RuleSet exclude-pattern Upgrading UselessOperationOnImmutable to detect more use cases, especially on String and fix false positives Fixed bug 1988829 - Violation reported without source file name (actually a fix to ConsecutiveLiteralAppends) Fixed bug 1989814 - false +: ConsecutiveLiteralAppends Fixed bug 1977230 - false positive: UselessOverridingMethod Fixed bug 1998185 - BeanMembersShouldSerialize vs @SuppressWarnings("serial") Fixed bug 2002722 - false + in UseStringBufferForStringAppends Fixed bug 2056318 - False positive for AvoidInstantiatingObjectsInLoops Fixed bug 1977438 - False positive for UselessStringValueOf Fixed bug 2050064 - False + SuspiciousOctalEscape with backslash literal Fixed bug 1556594 - Wonky detection of NullAssignment Optimizations and false positive fixes in PreserveStackTrace @SuppressWarnings("all") disables all warnings All comment types are now stored in ASTCompilationUnit, not just formal ones Fixed false negative in UselessOverridingMethod Fixed handling of escape characters in UseIndexOfChar and AppendCharacterWithChar New rule: Basic ruleset: EmptyInitializer May 20, 2008 - 4.2.2: Fixed false positive in UnusedImports: javadoc comments are parsed to check @see and other tags Fixed parsing bug: constant fields in annotation classes Bug fix: NPE in MoreThanOneLogger UnnecessaryParentheses now checks all expressions, not just return statements April 11, 2008 - 4.2.1: '41' and '42' shortcuts for rulesets added Fixed bug 1928009 - Error using migration ruleset in PMD 4.2 Fixed bug 1932242 - EmptyMethodInAbstractClassShouldBeAbstract false + Fixed bug 1808110 - PreserveStackTrace AvoidDuplicateLiteralRule now has 'skipAnnotations' boolean property ruleset.dtd and ruleset_xml_schema.xsd added to jar file in rulesets directory Update RuleSetWriter to handle non-Apache TRAX implementations, add an option to not use XML Namespaces Added file encoding option to CPD GUI, which already existed for the command line and Ant bin and java14/bin scripts: retroweaver version was not correct in java14/bin scripts support for extra languages in cpd.sh standard unix scripts can be used with cygwin March 25, 2008 - 4.2: Fixed bug 1920155 - CheckResultSet: Does not pass for loop conditionals March 21, 2008 - 4.2rc2: Fixed bug 1912831 - False + UnusedPrivateMethod with varargs Fixed bug 1913536 - Rule Designer does not recognize JSP(XML) Add -auxclasspath option for specifying Type Resolution classpath from command line and auxclasspath nested element for ant task. Fixed formatting problems in loggers. Ant task upgrade: Added a new attribute 'maxRuleCount' to indicate whether or not to fail the build if PMD finds that much violations. March 07, 2008 - 4.2rc1: Fixed bug 1866198 - PMD should not register global Logger Fixed bug 1843273 - False - on SimplifyBooleanReturns Fixed bug 1848888 - Fixed false positive in UseEqualsToCompareStrings Fixed bug 1874313 - Documentation bugs Fixed bug 1855409 - False + in EmptyMethodInAbstractClassShouldBeAbstract Fixed bug 1888967 - Updated xpath query to detect more "empty" methods. Fixed bug 1891399 - Check for JUnit4 test method fails Fixed bug 1894821 - False - for Test Class without Test Cases Fixed bug 1882457 - PositionLiteralsFirstInComparisons rule not working OK Fixed bug 1842505 - XML output incorrect for inner classes Fixed bug 1808158 - Constructor args could also be final Fixed bug 1902351 - AvoidReassigningParameters not identify parent field Fixed other false positives in EmptyMethodInAbstractClassShouldBeAbstract Fixed other issues in SimplifyBooleanReturns Modified AvoidReassigningParameter to also check constructor arguments for reassignement New rules: Basic ruleset: AvoidMultipleUnaryOperators Controversial ruleset: DoNotCallGarbageCollectionExplicitly,UseObjectForClearerAPI Design ruleset : ReturnEmptyArrayRatherThanNull,TooFewBranchesForASwitchStatement,AbstractClassWithoutAnyMethod Codesize : TooManyMethods StrictExceptions : DoNotThrowExceptionInFinally Strings : AvoidStringBufferField Rule upgrade: CyclomaticComplexity now can be configured to display only class average complexity or method complexity, or both. Designer upgrade: A new panel for symbols and a tooltips on AST node that displays line, column and access node attributes (private, static, abstract,...) 1.7 added as a valid option for targetjdk. New elements under <ruleset>: <exclude-pattern> to match files exclude from processing, with <include-pattern> to override. Rules can now be written which produce violations based upon aggregate file processing (i.e. cross/multiple file violations). PMD Rule Designer can now shows Symbol Table contents for the selected AST node. PMD Rule Designer shows position info in tooltip for AST nodes and highlights matching code for selected AST node in code window. CPD Ant task will report to System.out when 'outputFile' not given. RuleSetWriter class can be used to Serialize a RuleSet to XML in a standard fashion. Recommend PMD IDE plugins standardize their behavior. retroweaver updated to version 2.0.5. November 17, 2007 - 4.1: Fixed annotation bug: ClassCastException when a formal parameter had multiple annotations Added a Visual Studio renderer for CPD; just use "--format vs". Dependencies updates: asm to 3.1, retroweaver to 2.0.2, junit to 4.4 new ant target ("regress") to test regression bugs only November 01, 2007 - 4.1rc1: New rules: Basic ruleset: AvoidUsingHardCodedIP,CheckResultSet Controversial ruleset: AvoidFinalLocalVariable,AvoidUsingShortType,AvoidUsingVolatile,AvoidUsingNativeCode,AvoidAccessibilityAlteration Design ruleset: ClassWithOnlyPrivateConstructorsShouldBeFinal,EmptyMethodInAbstractClassShouldBeAbstract Imports ruleset: TooManyStaticImports J2ee ruleset: DoNotCallSystemExit, StaticEJBFieldShouldBeFinal,DoNotUseThreads Strings ruleset: UseEqualsToCompareStrings Fixed bug 674394 - fixed false positive in DuplicateImports for disambiguation import Fixed bug 631681 - fixed false positive in UnusedPrivateField when field is accessed by outer class Fixed bug 985989 - fixed false negative in ConstructorCallsOverridableMethod for inner static classes Fixed bug 1409944 - fixed false positive in SingularField for lock objects Fixed bug 1472195 - fixed false positives in PositionLiteralsFirstInComparisons when the string is used as a parameter Fixed bug 1522517 - fixed false positive in UselessOverridingMethod for clone method Fixed bug 1744065 - fixed false positive in BooleanInstantiation when a custom Boolean is used Fixed bug 1765613 - fixed NullPointerException in CloneMethodMustImplementCloneable when checking enum Fixed bug 1740480 - fixed false positive in ImmutableField when the assignment is inside an 'if' Fixed bug 1702782 - fixed false positive in UselessOperationOnImmutable when an Immutable on which an operation is performed is compareTo'd Fixed bugs 1764288/1744069/1744071 - When using Type Resolution all junit test cases will notice if you're using an extended TestCase Fixed bug 1793215 - pmd-nicerhtml.xsl does not display line numbers Fixes bug 1796928 - fixed false positive in AvoidThrowingRawExceptionTypes, when a Type name is the same as a RawException. Fixed bug 1811506 - False - : UnusedFormalParameter (property "checkall" needs to be set) Fixed false negative in UnnecessaryCaseChange The Java 1.5 source code parser is now the default for testcode used in PMD's unit tests. Added TypeResolution to the XPath rule. Use typeof function to determine if a node is of a particular type Adding a GenericLiteralChecker, a generic rule that require a regex as property. It will log a violation if a Literal is matched by the regex. See the new rule AvoidUsingHardCodedIP for an example. Adding support for multiple line span String in CPD's AbstractTokenizer, this may change, for the better, CPD's Ruby parsing. This release adds 'nicehtml', with the plan for the next major release to make nicehtml->html, and html->oldhtml. This feature uses an XSLT transformation, default stylesheet maybe override with '-xslt filename'. New CPD command line feature : Using more than one directory for sources. You can now have several '--files' on the command line. SingularField greatly improved to generate very few false positives (none?). Moved from controversial to design. Two options added to restore old behaviour (mostly). Jaxen updated to 1.1.1, now Literal[@Image='""'] works in XPath expressions. July 20, 2007 - 4.0 Fixed bug 1697397 - fixed false positives in ClassCastExceptionWithToArray Fixed bug 1728789 - removed redundant rule AvoidNonConstructorMethodsWithClassName; MethodWithSameNameAsEnclosingClass is faster and does the same thing. July 12, 2007 - 4.0rc2: New rules: Typeresolution ruleset: SignatureDeclareThrowsException - re-implementation using the new Type Resolution facility (old rule is still available) Fixed bug 1698550 - CloneMethodMustImplementCloneable now accepts a clone method that throws CloneNotSupportedException in a final class Fixed bug 1680568 - The new typeresolution SignatureDeclareThrowsException rule now ignores setUp and tearDown in JUnit 4 tests and tests that do not directly extend TestCase The new typeresolution SignatureDeclareThrowsException rule can now ignore JUnit classes completely by setting the IgnoreJUnitCompletely property Fixed false positive in UselessOperationOnImmutable PMD now defaults to using a Java 1.5 source code parser. June 22, 2007 - 4.0rc1: New rules: Strict exception ruleset: DoNotExtendJavaLangError Basic JSP ruleset: JspEncoding J2EE ruleset: MDBAndSessionBeanNamingConvention, RemoteSessionInterfaceNamingConvention, LocalInterfaceSessionNamingConvention, LocalHomeNamingConvention, RemoteInterfaceNamingConvention Optimizations ruleset: AddEmptyString Naming: BooleanGetMethodName New rulesets: Migrating To JUnit4: Rules that help move from JUnit 3 to JUnit 4 Fixed bug 1670717 - 'Copy xml to clipboard' menu command now works again in the Designer Fixed bug 1618858 - PMD no longer raises an exception on XPath like '//ConditionalExpression//ConditionalExpression' Fixed bug 1626232 - Commons logging rules (ProperLogger and UseCorrectExceptionLogging) now catch more cases Fixed bugs 1626201 & 1633683 - BrokenNullCheck now catches more cases Fixed bug 1626715 - UseAssertSameInsteadOfAssertTrue now correctly checks classes which contain the null constant Fixed bug 1531216 - ImmutableField. NameOccurrence.isSelfAssignment now recognizes this.x++ as a self assignment Fixed bug 1634078 - StringToString now recognizes toString on a String Array, rather than an element. Fixed bug 1631646 - UselessOperationOnImmutable doesn't throw on variable.method().variable. Fixed bug 1627830 - UseLocaleWithCaseConversions now works with compound string operations Fixed bug 1613807 - DontImportJavaLang rule allows import to Thread inner classes Fixed bug 1637573 - The PMD Ant task no longer closes System.out if toConsole is set Fixed bug 1451251 - A new UnusedImports rule, using typeresolution, finds unused import on demand rules Fixed bug 1613793 - MissingSerialVersionUID rule now doesn't fire on abstract classes Fixed bug 1666646 - ImmutableField rule doesn't report against volatile variables Fixed bug 1693924 - Type resolution now works for implicit imports Fixed bug 1705716 - Annotation declarations now trigger a new scope level in the symbol table. Fixed bug 1743938 - False +: InsufficientStringBufferDeclaration with multiply Fixed bug 1657957 - UseStringBufferForStringAppends now catches self-assignments Applied patch 1612455 - RFE 1411022 CompareObjectsWithEquals now catches the case where comparison is against new Object Implemented RFE 1562230 - Added migration rule to check for instantiation of Short/Byte/Long Implemented RFE 1627581 - SuppressWarnings("unused") now suppresses all warnings in unusedcode.xml XPath rules are now chained together for an extra speedup in processing PMD now requires JDK 1.5 to be compiled. Java 1.4 support is provided using Retroweaver - PMD will still analyze code from earlier JDKs - to run pmd with 1.4, use the files from the java14 directory (weaved pmd jar and support files) TypeResolution now looks at some ASTName nodes. Memory footprint reduced: most renderers now use less memory by generating reports on the fly. Ant task now takes advantage of multithreading code and on the fly renderers Ant task now logs more debug info when using -verbose PMD command line now has -benchmark: output a benchmark report upon completion; default to System.err December 19, 2006 - 3.9: New rules: Basic ruleset: BigIntegerInstantiation, AvoidUsingOctalValues Codesize ruleset: NPathComplexity, NcssTypeCount, NcssMethodCount, NcssConstructorCount Design ruleset: UseCollectionIsEmpty Strings ruleset: StringBufferInstantiationWithChar Typeresolution ruleset: Loose Coupling - This is a re-implementation using the new Type Resolution facility Fixed bug 1610730 - MisplacedNullCheck now catches more cases Fixed bug 1570915 - AvoidRethrowingException no longer reports a false positive for certain nested exceptions. Fixed bug 1571324 - UselessStringValueOf no longer reports a false positive for additive expressions. Fixed bug 1573795 - PreserveStackTrace doesn't throw CastClassException on exception with 0 args Fixed bug 1573591 - NonThreadSafeSingleton doesn't throw NPE when using this keyword Fixed bug 1371753 - UnnecessaryLocalBeforeReturn is now less aggressive in its reporting. Fixed bug 1566547 - Annotations with an empty MemberValueArrayInitializer are now parsed properly. Fixed bugs 1060761 / 1433119 & RFE 1196954 - CloseResource now takes an optional parameter to identify closure methods Fixed bug 1579615 - OverrideBothEqualsAndHashcode no longer throws an Exception on equals methods that don't have Object as a parameter type. Fixed bug 1580859 - AvoidDecimalLiteralsInBigDecimalConstructor now catches more cases. Fixed bug 1581123 - False +: UnnecessaryWrapperObjectCreation. Fixed bug 1592710 - VariableNamingConventions no longer reports false positives on certain enum declarations. Fixed bug 1593292 - The CPD GUI now works with the 'by extension' option selected. Fixed bug 1560944 - CPD now skips symlinks. Fixed bug 1570824 - HTML reports generated on Windows no longer contain double backslashes. This caused problems when viewing those reports with Apache. Fixed bug 1031966 - Re-Implemented CloneMethodMustImplementCloneable as a typeresolution rule. This rule can now detect super classes/interfaces which are cloneable Fixed bug 1571309 - Optional command line options may be used either before or after the mandatory arguments Applied patch 1551189 - SingularField false + for initialization blocks Applied patch 1573981 - false + in CloneMethodMustImplementCloneable Applied patch 1574988 - false + in OverrideBothEqualsAndHashcode Applied patch 1583167 - Better test code management. Internal JUnits can now be written in XML's Applied patch 1613674 - Support classpaths with spaces in pmd.bat Applied patch 1615519 - controversial/DefaultPackage XPath rule is wrong Applied patch 1615546 - Added option to command line to write directly to a file Implemented RFE 1566313 - Command Line now takes minimumpriority attribute to filter out rulesets PMD now requires JDK 1.4 to run - PMD will still analyze code from earlier JDKs - PMD now uses the built-in JDK 1.4 regex utils vs Jakarta ORO - PMD now uses the JDK javax.xml APIs rather than being hardcoded to use Xerces and Xalan SummaryHTML Report changes from Brent Fisher - now contains linePrefix to support source output from javadoc using "linksource" Fixed CSVRenderer - had flipped line and priority columns Fixed bug in Ant task - CSV reports were being output as text. Fixed false negatives in UseArraysAsList. Fixed several JDK 1.5 parsing bugs. Fixed several rules (exceptions on jdk 1.5 and jdk 1.6 source code). Fixed array handling in AvoidReassigningParameters and UnusedFormalParameter. Fixed bug in UselessOverridingMethod: false + when adding synchronization. Fixed false positives in LocalVariableCouldBeFinal. Fixed false positives in MethodArgumentCouldBeFinal. Modified annotation suppression to use @SuppressWarning("PMD") to suppress all warnings and @SuppressWarning("PMD.UnusedLocalVariable") to suppress a particular rule's warnings. Rules can now call RuleContext.getSourceType() if they need to make different checks on JDK 1.4 and 1.5 code. CloseResource rule now checks code without java.sql import. ArrayIsStoredDirectly rule now checks Constructors undo/redo added to text areas in Designer. Better 'create rule XML' panel in Designer. use of entrySet to iterate over Maps. 1.6 added as a valid option for targetjdk. PMD now allows rules to use Type Resolution. This was referenced in patch 1257259. Renderers use less memory when generating reports. New DynamicXPathRule class to speed up XPath based rules by providing a base type for the XPath expression. Multithreaded processing on multi core or multi cpu systems. Performance Refactoring, XPath rules re-written as Java: AssignmentInOperand AvoidDollarSigns DontImportJavaLang DontImportSun MoreThanOneLogger SuspiciousHashcodeMethodName UselessStringValueOf October 4, 2006 - 3.8: New rules: Basic ruleset: BrokenNullCheck Strict exceptions ruleset: AvoidRethrowingException Optimizations ruleset: UnnecessaryWrapperObjectCreation Strings ruleset: UselessStringValueOf Fixed bug 1498910 - AssignmentInOperand no longer has a typo in the message. Fixed bug 1498960 - DontImportJavaLang no longer reports static imports of java.lang members. Fixed bug 1417106 - MissingBreakInSwitch no longer flags stmts where every case has either a return or a throw. Fixed bug 1412529 - UncommentedEmptyConstructor no longer flags private constructors. Fixed bug 1462189 - InsufficientStringBufferDeclaration now resets when it reaches setLength the same way it does at a Constructor Fixed bug 1497815 - InsufficientStringBufferDeclaration rule now takes the length of the constructor into account, and adds the length of the initial string to its initial length Fixed bug 1504842 - ExceptionSignatureDeclaration no longer flags methods starting with 'test'. Fixed bug 1516728 - UselessOverridingMethod no longer raises an NPE on methods that use generics. Fixed bug 1522054 - BooleanInstantiation now detects instantiations inside method calls. Fixed bug 1522056 - UseStringBufferForStringAppends now flags appends which occur in static initializers and constructors Fixed bug 1526530 - SingularField now finds fields which are hidden at the method or static level Fixed bug 1529805 - UnusedModifier no longer throws NPEs on JDK 1.5 enums. Fixed bug 1531593 - UnnecessaryConversionTemporary no longer reports false positives when toString() is invoked inside the call to 'new Long/Integer/etc()'. Fixed bug 1512871 - Improved C++ tokenizer error messages - now they include the filename. Fixed bug 1531152 - CloneThrowsCloneNotSupportedException now reports the proper line number. Fixed bug 1531236 - IdempotentOperations reports fewer false positives. Fixed bug 1544564 - LooseCoupling rule now checks for ArrayLists Fixed bug 1544565 - NonThreadSafeSingleton now finds if's with compound statements Fixed bug 1561784 - AbstractOptimizationRule no longer throws ClassCastExceptions on certain postfix expressions. Fixed a bug in AvoidProtectedFieldInFinalClass - it no longer reports false positives for protected fields in inner classes. Fixed a bug in the C++ grammar - the tokenizer now properly recognizes macro definitions which are followed by a multiline comment. Modified C++ tokenizer to use the JavaCC STATIC option; this results in about a 30% speedup in tokenizing. Implemented RFE 1501850 - UnusedFormalParameter now catches cases where a parameter is assigned to but not used. Applied patch 1481024 (implementing RFE 1490181)- NOPMD messages can now be reported with a user specified msg, e.g., //NOPMD - this is expected Added JSP support to the copy/paste detector. Placed JSF/JSP ruleset names in rulesets/jsprulesets.properties Added the image to the ASTEnumConstant nodes. Added new XSLT stylesheet for CPD XML->HTML from Max Tardiveau. Refactored UseIndexOfChar to extract common functionality into AbstractPoorMethodCall. Improved CPD GUI and Designer look/functionality; thanks to Brian Remedios for the changes! Rewrote the NOPMD mechanism to collect NOPMD markers as the source file is tokenized. This eliminates an entire scan of each source file. Applied patch from Jason Bennett to enhance CyclomaticComplexity rule to account for conditional or/and nodes, do stmts, and catch blocks. Applied patch from Xavier Le Vourch to reduce false postives from CloneMethodMustImplementCloneable. Updated Jaxen library to beta 10. Performance Refactoring, XPath rules re-written as Java: BooleanInstantiation UselessOperationOnImmutable OverrideBothEqualsAndHashcode UnnecessaryReturn UseStringBufferForStringAppends SingularField NonThreadSafeSingleton June 1, 2006 - 3.7: New rules: Basic-JSP ruleset: DuplicateJspImport Design ruleset: PreserveStackTrace J2EE ruleset: UseProperClassLoader Implemented RFE 1462019 - Add JSPs to Ant Task Implemented RFE 1462020 - Add JSPs to Designer Fixed bug 1461426 InsufficientStringBufferDeclaration does not consider paths Fixed bug 1462184 False +: InsufficientStringBufferDeclaration - wrong size Fixed bug 1465574 - UnusedPrivateMethod no longer reports false positives when a private method is called from a method with a parameter of the same name. Fixed bug 1114003 - UnusedPrivateMethod no longer reports false positives when two methods have the same name and number of arguments but different types. The fix causes PMD to miss a few valid cases, but, c'est la vie. Fixed bug 1472843 - UnusedPrivateMethod no longer reports false positives when a private method is only called from a method that contains a variable with the same name as that method. Fixed bug 1461442 - UseAssertSameInsteadOfAssertTrue now ignores comparisons to null; UseAssertNullInsteadOfAssertTrue will report those. Fixed bug 1474778 - UnnecessaryCaseChange no longer flags usages of toUpperCase(Locale). Fixed bug 1423429 - ImmutableField no longer reports false positives on variables which can be set via an anonymous inner class that is created in the constructor. Fixed major bug in CPD; it was not picking up files other than .java or .jsp. Fixed a bug in CallSuperInConstructor; it now checks inner classes/enums more carefully. Fixed a bug in VariableNamingConventions; it was not setting the warning message properly. Fixed bug in C/C++ parser; a '$' is now allowed in an identifier. This is useful in VMS. Fixed a symbol table bug; PMD no longer crashes on enumeration declarations in the same scope containing the same field name Fixed a bug in ASTVariableDeclaratorId that triggered a ClassCastException if a annotation was used on a parameter. Added RuleViolation.getBeginColumn()/getEndColumn() Added an optional 'showSuppressed' item to the Ant task; this is false by default and toggles whether or not suppressed items are shown in the report. Added an IRuleViolation interface and modified various code classes (include Renderer implementations and Report) to use it. Modified JJTree grammar to use conditional node descriptors for various expression nodes and to use node suppression for ASTModifier nodes; this replaces a bunch of DiscardableNodeCleaner hackery. It also fixed bug 1445026. Modified C/CPP grammar to only build the lexical analyzer; we're not using the parser for CPD, just the token manager. This reduces the PMD jar file size by about 50 KB. March 29, 2006 - 3.6: New rules: Basic ruleset: AvoidThreadGroup Design ruleset: UnsynchronizedStaticDateFormatter Strings ruleset: InefficientEmptyStringCheck, InsufficientStringBufferDeclaration JUnit ruleset: SimplifyBooleanAssertion Basic-JSF ruleset: DontNestJsfInJstlIteration Basic-JSP ruleset: NoLongScripts, NoScriptlets, NoInlineStyleInformation, NoClassAttribute, NoJspForward, IframeMissingSrcAttribute, NoHtmlComments Fixed bug 1414985 - ConsecutiveLiteralAppends now checks for intervening references between appends. Fixed bug 1418424 - ConsecutiveLiteralAppends no longer flags appends in separate methods. Fixed bug 1416167 - AppendCharacterWithChar now catches cases involving escaped characters. Fixed bug 1421409 - Ant task now has setter to allow minimumPriority attribute to be used. Fixed bug 1416164 - InefficientStringBuffering no longer reports false positives on the three argument version of StringBuffer.append(). Fixed bug 1415326 - JUnitTestsShouldContainAsserts no longer errors out on JDK 1.5 generics. Fixed bug 1415333 - CyclomaticComplexity no longer errors out on JDK 1.5 enums. Fixed bug 1415663 - PMD no longer fails to parse abstract classes declared in a method. Fixed bug 1433439 - UseIndexOfChar no longer reports false positives on case like indexOf('a' + getFoo()). Fixed bug 1435218 - LoggerIsNotStaticFinal no longer reports false positives for local variables. Fixed bug 1413745 - ArrayIsStoredDirectly no longer reports false positives for array deferences. Fixed bug 1435751 - Added encoding type of UTF-8 to the CPD XML file. Fixed bug 1441539 - ConsecutiveLiteralAppends no longer flags appends() involving method calls. Fixed bug 1339470 - PMD no longer fails to parse certain non-static initializers. Fixed bug 1425772 - PMD no longer fails with errors in ASTFieldDeclaration when parsing some JDK 1.5 code. Fixed bugs 1448123 and 1449175 - AvoidFieldNameMatchingTypeName, SingularField, TooManyFields, and AvoidFieldNameMatchingMethodName no longer error out on enumerations. Fixed bug 1444654 - migrating_to_14 and migrating_to_15 no longer refer to rule tests. Fixed bug 1445231 - TestClassWithoutTestCases: no longer flags abstract classes. Fixed bug 1445765 - PMD no longer uses huge amounts of memory. However, you need to use RuleViolation.getBeginLine(); RuleViolation.getNode() is no more. Fixed bug 1447295 - UseNotifyAllInsteadOfNotify no longer flags notify() methods that have a parameter. Fixed bug 1455965 - MethodReturnsInternalArray no longer flags variations on 'return new Object[] {}'. Implemented RFE 1415487 - Added a rulesets/releases/35.xml ruleset (and similar rulesets for previous re
Source: ReadMe.txt, updated 2013-02-03