pmd/docs/pages/release_notes.md

439 lines
30 KiB
Markdown
Raw Normal View History

---
title: PMD Release Notes
permalink: pmd_release_notes.html
keywords: changelog, release notes
---
2017-06-24 22:28:05 +02:00
## ????? - 6.0.0-SNAPSHOT
2017-06-24 22:28:05 +02:00
The PMD team is pleased to announce PMD 6.0.0.
2016-07-27 22:03:51 +02:00
2017-06-24 22:28:05 +02:00
This is a major release.
2016-07-07 20:48:01 +02:00
2017-04-29 20:22:28 +02:00
### Table Of Contents
* [New and noteworthy](#new-and-noteworthy)
2017-09-23 00:26:41 +02:00
* [Java 9 support](#java-9-support)
* [Revamped Apex CPD](#revamped-apex-cpd)
* [Java Type Resolution](#java-type-resolution)
* [Metrics Framework](#metrics-framework)
2017-09-03 20:06:07 -03:00
* [Error Reporting](#error-reporting)
* [Apex Rule Suppression](#apex-rule-suppression)
2017-09-05 18:03:15 +02:00
* [New Rules](#new-rules)
* [Modified Rules](#modified-rules)
2017-09-05 18:03:15 +02:00
* [Deprecated Rules](#deprecated-rules)
* [Removed Rules](#removed-rules)
2017-09-10 05:51:16 -03:00
* [Java Symbol Table](#java-symbol-table)
* [Apex Parser Update](#apex-parser-update)
* [Incremental Analysis](#incremental-analysis)
* [Fixed Issues](#fixed-issues)
* [API Changes](#api-changes)
* [External Contributions](#external-contributions)
2017-04-29 20:22:28 +02:00
### New and noteworthy
2017-09-23 00:26:41 +02:00
#### Java 9 support
The Java grammar has been updated to support analyzing Java 9 projects:
* private methods in interfaces are possible
* The underscore "_" is considered an invalid identifier
* Diamond operator for anonymous classes
* The module declarations in `module-info.java` can be parsed
* Concise try-with-resources statements are supported
Java 9 support is enabled by default. You can switch back to an older java version
via the command line, e.g. `-language java -version 1.8`.
2017-09-23 00:26:41 +02:00
#### Revamped Apex CPD
2017-07-10 20:57:02 +02:00
We are now using the Apex Jorje Lexer to tokenize Apex code for CPD. This change means:
* All comments are now ignored for CPD. This is consistent with how other languages such as Java and Groovy work.
* Tokenization honors the language specification, which improves accuracy.
CPD will therefore have less false positives and false negatives.
#### Java Type Resolution
2017-07-08 16:23:17 -03:00
As part of Google Summer of Code 2017, [Bendegúz Nagy](https://github.com/WinterGrascph)'s work on type resolution for Java continues.
2017-07-25 11:40:46 -03:00
For this release he has extended support for method calls for both instance and static methods.
2017-07-08 16:23:17 -03:00
2017-07-13 15:42:30 -03:00
Method shadowing and overloading are supported, as are varargs. However, the selection of the target method upon the presence
2017-07-11 15:55:56 -03:00
of generics and type inference is still work in progress. Expect it in forecoming releases.
2017-07-08 16:23:17 -03:00
2017-07-21 12:50:52 -03:00
As for fields, the basic support was in place for release 5.8.0, but has now been expanded to support static fields.
2017-07-10 20:47:48 +02:00
#### Metrics Framework
2017-07-10 20:57:02 +02:00
As part of Google Summer of Code 2017, [Clément Fournier](https://github.com/oowekyala) is continuing his work
2017-07-10 20:47:48 +02:00
on the new metrics framework for object-oriented metrics.
There are already a couple of metrics (e.g. ATFD, WMC, Cyclo, LoC) implemented. More metrics are planned.
Based on those metrics, rules like "GodClass" detection can be implemented more easily.
2017-08-14 10:20:48 +02:00
The Metrics framework has been abstracted and is available in `pmd-core` for other languages. With this
PMD release, the metrics framework is supported for both Java and Apex.
2017-09-03 20:06:07 -03:00
#### Error Reporting
A number of improvements on error reporting have taken place, meaning changes to some of the report formats.
2017-09-04 02:06:47 -03:00
Also of note, the xml report now provides a XML Schema definition, allowing easier parsing and validation.
2017-09-03 20:06:07 -03:00
##### Processing Errors
Processing errors can now provide not only the message previously included on some reports, but also a full stacktrace.
This will allow better error reports when providing feedback to the PMD team and help in debugging issues.
The report formats providing full stacktrace of errors are:
* html
* summaryhtml
* textcolor
* vbhtml
* xml
2017-09-30 11:32:01 +02:00
##### Configuration Errors
2017-07-25 13:43:57 -03:00
For a long time reports have been notified of configuration errors on rules, but they have remained hidden.
On a push to make these more evident to users, and help them get the best results out of PMD, we have started
to include them on the reports.
So far, only reports that include processing errors are showing configuration errors. In other words, the report formats
providing configuration error reporting are:
* csv
* html
* summaryhtml
* text
* textcolor
* vbhtml
* xml
As we move forward we will be able to detect and report more configuration errors (ie: incomplete `auxclasspath`)
and include them to such reports.
2017-07-10 20:47:48 +02:00
#### Apex Rule Suppression
Apex violations can now be suppressed very similarly to how it's done in Java, by making use of a
`@SuppressWarnings` annotation.
Supported syntax includes:
```
@SupressWarnings('PMD') // to supress all Apex rules
@SupressWarnings('all') // to supress all Apex rules
@SupressWarnings('PMD.ARuleName') // to supress only the rule named ARuleName
@SupressWarnings('PMD.ARuleName, PMD.AnotherRuleName') // to supress only the rule named ARuleName or AnotherRuleName
```
Notice this last scenario is slightly different to the Java syntax. This is due to differences in the Apex grammar for annotations.
2017-09-05 18:03:15 +02:00
#### New Rules
* The rule `NcssCount` (ruleset `java-codesize`) replaces the three rules "NcssConstructorCount", "NcssMethodCount",
and "NcssTypeCount". The new rule uses the metrics framework to achieve the same. It has two properties, to
define the report level for method and class sizes separately. Constructors and methods are considered the same.
2017-10-17 13:42:28 -03:00
* The new rule `DoNotExtendJavaLangThrowable` (ruleset `java-strictexception`) is a companion for the
`java-strictexception.xml/DoNotExtendJavaLangError`, detecting direct extensions of `java.lang.Throwable`.
2017-09-09 09:58:05 +02:00
* The new rule `ForLoopCanBeForeach` (ruleset `java-migration`) helps to identify those for-loops that can
be safely refactored into for-each-loops available since java 1.5.
2017-09-09 09:54:53 +02:00
2017-10-08 19:44:56 -03:00
* The new rule `AvoidDirectAccessTriggerMap` (ruleset `apex-style`) helps to identify direct array access to triggers,
which can produce bugs by iether accessing non-existing indexes, or them leaving out. You should use for-each-loops
instead.
2017-10-18 23:55:25 -03:00
* The new rule `AvoidHardcodingId` (ruleset `apex-style`) detects hardcoded strings that look like identifiers
and flags them. Record IDs change between environments, meaning hardcoded ids are bound to fail under a different
setup.
2017-10-08 20:00:36 -03:00
* A whole new ruleset has been added to Apex, `apex-empty`. It currently migrates 5 rules from the equivalent
`java-empty` ruleset for Apex. The ruleset includes:
* `EmptyCatchBlock` to detect catch blocks completely ignoring exceptions.
* `EmptyIfStmt` for if blocks with no content, that can be safely removed.
* `EmptyTryOrFinallyBlock` for empty try / finally blocks that can be safely removed.
* `EmptyWhileStmt` for empty while loops that can be safely removed.
* `EmptyStatementBlock` for empty code blocks that can be safely removed.
2017-10-09 15:48:40 -03:00
* The new rule `AvoidSoslInLoops` (ruleset `apex-performance`) is the companion of the old
`apex-performance/AvoidSoqlInLoops` rule, flagging SOSL (Salesforce Object Search Language) queries when within
loops, to avoid governor issues, and hitting the database too often.
2017-06-26 15:09:34 -03:00
#### Modified Rules
2017-11-07 00:34:15 -03:00
* The rule `UnnecessaryFinalModifier` (ruleset `java-unnecessarycode`) has been merged into the rule
`UnnecessaryModifier` of the same ruleset. As part of this, the rule has been revamped to detect more cases.
2017-07-10 20:57:02 +02:00
It will now flag anonymous class' methods marked as final (can't be overridden, so it's pointless), along with
2017-11-07 00:34:15 -03:00
final methods overridden / defined within enum instances. It will also flag `final` modifiers on try-with-resources.
2017-06-26 15:09:34 -03:00
2017-08-16 14:15:46 -03:00
* The rule `UnnecessaryParentheses` (ruleset `java-controversial`) has been merged into `UselessParentheses`
(ruleset `java-unnecessary`). The rule covers all scenarios previously covered by either rule.
2017-08-16 15:16:44 -03:00
* The rule `UncommentedEmptyConstructor` (ruleset `java-design`) will now ignore empty constructors annotated with
`javax.inject.Inject`.
2017-08-25 15:01:37 -03:00
* The rule `AbstractClassWithoutAnyMethod` (ruleset `java-design`) will now ignore classes annotated with
`com.google.auto.value.AutoValue`.
2017-08-26 10:56:20 +02:00
* The rule `GodClass` (ruleset `java-design`) has been revamped to use the new metrics framework.
* The rule `LooseCoupling` (ruleset `java-coupling`) has been replaced by the typeresolution-based implementation.
* The rule `CloneMethodMustImplementCloneable` (ruleset `java-clone`) has been replaced by the typeresolution-based
implementation and is now able to detect cases if a class implements or extends a Cloneable class/interface.
* The rule `UnusedImports` (ruleset `java-imports`) has been replaced by the typeresolution-based
implementation and is now able to detect unused on-demand imports.
* The rule `SignatureDeclareThrowsException` (ruleset 'java-strictexception') has been replaced by the
typeresolution-based implementation. It has a new property `IgnoreJUnitCompletely`, which allows all
methods in a JUnit testcase to throws exceptions.
2017-11-09 21:57:21 +01:00
* The rule `NPathComplexity` (ruleset `java-codesize`) has been revamped to use the new metrics framework.
Its report threshold can be configured via the property `reportLevel`, which replaces the now
deprecated property `minimum`.
2017-09-05 18:03:15 +02:00
#### Deprecated Rules
* The rules `NcssConstructorCount`, `NcssMethodCount`, and `NcssTypeCount` (ruleset `java-codesize`) have been
deprecated. They will be replaced by the new rule `NcssCount` in the same ruleset.
* The rule `LooseCoupling` in ruleset `java-typeresolution` is deprecated. Use the rule with the same name
from ruleset `java-coupling` instead.
* The rule `CloneMethodMustImplementCloneable` in ruleset `java-typeresolution` is deprecated. Use the rule with
the same name from ruleset `java-clone` instead.
* The rule `UnusedImports` in ruleset `java-typeresolution` is deprecated. Use the rule with
the same name from ruleset `java-imports` instead.
* The rule `SignatureDeclareThrowsException` in ruleset `java-typeresolution` is deprecated. Use the rule
with the same name from ruleset `java-strictexception` instead.
#### Removed Rules
2017-06-26 14:11:35 -03:00
* The deprecated rule `UseSingleton` has been removed from the ruleset `java-design`. The rule has been renamed
long time ago to `UseUtilityClass`.
2017-05-01 17:42:38 +02:00
2017-08-09 12:24:15 -03:00
#### Java Symbol Table
A [bug in symbol table](https://github.com/pmd/pmd/pull/549/commits/0958621ca884a8002012fc7738308c8dfc24b97c) prevented
the symbol table analysis to properly match primitive arrays types. The issue [affected the `java-unsedcode/UnusedPrivateMethod`](https://github.com/pmd/pmd/issues/521)
rule, but other rules may now produce improved results as consequence of this fix.
#### Apex Parser Update
2017-08-14 10:20:48 +02:00
The Apex parser version was bumped, from `1.0-sfdc-187` to `1.0-sfdc-224`. This update let us take full advantage
of the latest improvements from Salesforce, but introduces some breaking changes:
2017-08-14 10:20:48 +02:00
* `BlockStatements` are now created for all control structures, even if no brace is used. We have therefore added
a `hasCurlyBrace` method to differentiate between both scenarios.
* New AST node types are available. In particular `CastExpression`, `ConstructorPreamble`, `IllegalStoreExpression`,
`MethodBlockStatement`, `Modifier`, `MultiStatement`, `NestedExpression`, `NestedStoreExpression`,
`NewKeyValueObjectExpression` and `StatementExecuted`
* Some nodes have been removed. Such is the case of `TestNode`, `DottedExpression` and `NewNameValueObjectExpression`
(replaced by `NewKeyValueObjectExpression`)
2017-08-14 10:20:48 +02:00
All existing rules have been updated to reflect these changes. If you have custom rules, be sure to update them.
2017-08-09 12:24:15 -03:00
2017-09-10 05:51:16 -03:00
#### Incremental Analysis
The incremental analysis feature first introduced in PMD 5.6.0 has been enhanced. A few minor issues have been fixed,
and several improvements have been performed to make it more accurate.
The cache will now detect changes to the JARs referenced in the `auxclasspath` instead of simply looking at their paths
and order. This means that if you are referencing a JAR you are overwriting in some way, the incremental analysis can
2017-09-10 06:09:57 -03:00
now detect it and invalidate it's cache to avoid false reports.
2017-09-10 05:51:16 -03:00
2017-10-25 18:06:34 -03:00
Similarly, any changes to the execution classpath of PMD will invalidate the cache. This means that if you have custom
rules packaged in a jar, any changes to it will invalidate the cache automatically.
2017-09-10 05:51:16 -03:00
We have also improved logging on the analysis code, allowing better insight into how the cache is performing,
under debug / verbose builds you can even see individual hits / misses to the cache (and the reason for any miss!)
Finally, as this feature keeps maturing, we are gently pushing this forward. If not using incremental analysis,
a warning will now be produced suggesting users to adopt it for better performance.
2016-12-13 13:38:59 -03:00
### Fixed Issues
2016-06-25 13:51:03 +02:00
2017-09-03 21:23:09 -03:00
* all
2017-09-15 11:07:56 +02:00
* [#532](https://github.com/pmd/pmd/issues/532): \[core] security concerns on URL-based rulesets
2017-09-04 02:06:47 -03:00
* [#538](https://github.com/pmd/pmd/issues/538): \[core] Provide an XML Schema for XML reports
2017-09-07 12:12:26 -03:00
* [#600](https://github.com/pmd/pmd/issues/600): \[core] Nullpointer while creating cache File
2017-09-29 19:52:16 +02:00
* [#604](https://github.com/pmd/pmd/issues/604): \[core] Incremental analysis should detect changes to jars in classpath
2017-09-10 05:43:08 -03:00
* [#608](https://github.com/pmd/pmd/issues/608): \[core] Add DEBUG log when applying incremental analysis
2017-09-30 11:30:39 +02:00
* [#618](https://github.com/pmd/pmd/issues/618): \[core] Incremental Analysis doesn't close file correctly on Windows upon a cache hit
2017-09-30 18:40:00 -03:00
* [#643](https://github.com/pmd/pmd/issues/643): \[core] PMD Properties (dev-properties) breaks markup on CodeClimateRenderer
2017-10-28 19:19:27 +02:00
* [#680](https://github.com/pmd/pmd/pull/680): \[core] Isolate classloaders for runtime and auxclasspath
2017-07-07 10:52:23 +02:00
* apex
* [#265](https://github.com/pmd/pmd/issues/265): \[apex] Make Rule suppression work
2017-07-07 10:52:23 +02:00
* [#488](https://github.com/pmd/pmd/pull/488): \[apex] Use Apex lexer for CPD
2017-08-12 19:12:44 +02:00
* [#489](https://github.com/pmd/pmd/pull/489): \[apex] Update Apex compiler
* [#500](https://github.com/pmd/pmd/issues/500): \[apex] Running through CLI shows jorje optimization messages
2017-10-16 21:11:38 +02:00
* [#605](https://github.com/pmd/pmd/issues/605): \[apex] java.lang.NoClassDefFoundError in the latest build
2017-10-09 15:48:40 -03:00
* [#637](https://github.com/pmd/pmd/issues/637): \[apex] Avoid SOSL in loops
2017-07-07 22:46:29 +02:00
* cpp
* [#448](https://github.com/pmd/pmd/issues/448): \[cpp] Write custom CharStream to handle continuation characters
2017-06-26 14:13:35 -03:00
* java
* [#1513](https://sourceforge.net/p/pmd/bugs/1513/): \[java] Remove deprecated rule UseSingleton
2017-10-10 12:10:59 -03:00
* [#328](https://github.com/pmd/pmd/issues/328): \[java] java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/jsp/PageContext
2017-07-17 20:50:50 +02:00
* [#487](https://github.com/pmd/pmd/pull/487): \[java] Fix typeresolution for anonymous extending object
2017-07-27 11:15:15 -03:00
* [#496](https://github.com/pmd/pmd/issues/496): \[java] processing error on generics inherited from enclosing class
2017-10-06 19:08:59 -03:00
* [#510](https://github.com/pmd/pmd/issues/510): \[java] Typeresolution fails on a simple primary when the source is loaded from a class literal
2017-07-29 18:54:44 -03:00
* [#527](https://github.com/pmd/pmd/issues/527): \[java] Lombok getter annotation on enum is not recognized correctly
2017-10-06 19:08:59 -03:00
* [#534](https://github.com/pmd/pmd/issues/534): \[java] NPE in MethodTypeResolution for static methods
2017-10-25 18:06:34 -03:00
* [#603](https://github.com/pmd/pmd/issues/603): \[core] incremental analysis should invalidate upon Java rule plugin changes
2017-10-06 19:08:59 -03:00
* [#650](https://github.com/pmd/pmd/issues/650): \[java] ProcesingError analyzing code under 5.8.1
2017-09-04 11:38:58 -03:00
* java-basic
* [#565](https://github.com/pmd/pmd/pull/565): \[java] False negative on DontCallThreadRun when extending Thread
2017-08-02 23:58:57 -03:00
* java-comments
* [#536](https://github.com/pmd/pmd/issues/536): \[java] CommentDefaultAccessModifierRule ignores constructors
2017-06-26 13:03:28 -03:00
* java-controversial
2017-09-09 18:55:29 -03:00
* [#388](https://github.com/pmd/pmd/issues/388): \[java] controversial.AvoidLiteralsInIfCondition 0.0 false positive
2017-06-26 13:03:28 -03:00
* [#408](https://github.com/pmd/pmd/issues/408): \[java] DFA not analyzing asserts
2017-08-16 14:15:46 -03:00
* [#537](https://github.com/pmd/pmd/issues/537): \[java] UnnecessaryParentheses fails to detect obvious scenario
2017-08-16 15:16:44 -03:00
* java-design
* [#357](https://github.com/pmd/pmd/issues/357): \[java] UncommentedEmptyConstructor consider annotations on Constructor
2017-08-25 15:01:37 -03:00
* [#438](https://github.com/pmd/pmd/issues/438): \[java] Relax AbstractClassWithoutAnyMethod when class is annotated by @AutoValue
2017-09-03 20:15:47 -03:00
* [#590](https://github.com/pmd/pmd/issues/590): \[java] False positive on MissingStaticMethodInNonInstantiatableClass
2017-07-24 17:51:41 -03:00
* java-sunsecure
* [#468](https://github.com/pmd/pmd/issues/468): \[java] ArrayIsStoredDirectly false positive
2017-08-09 12:24:15 -03:00
* java-unusedcode
* [#521](https://github.com/pmd/pmd/issues/521): \[java] UnusedPrivateMethod returns false positives with primitive data type in map argument
2017-06-26 15:09:34 -03:00
* java-unnecessarycode
* [#412](https://github.com/pmd/pmd/issues/412): \[java] java-unnecessarycode/UnnecessaryFinalModifier missing cases
2017-11-07 00:34:15 -03:00
* [#676](https://github.com/pmd/pmd/issues/676): \[java] java-unnecessarycode/UnnecessaryFinalModifier on try-with-resources
2017-05-26 14:27:44 -03:00
2017-06-24 22:28:05 +02:00
### API Changes
2017-04-29 20:22:28 +02:00
2017-06-26 13:08:14 -03:00
* The class `net.sourceforge.pmd.lang.dfa.NodeType` has been converted to an enum.
All node types are enum members now instead of int constants. The names for node types are retained.
2017-07-17 20:23:07 +02:00
* The properties API (rule and report properties) have been revamped to be fully typesafe. This is everything
around `net.sourceforge.pmd.PropertyDescriptor`.
2017-08-17 19:57:58 +02:00
* The rule classes `net.sourceforge.pmd.lang.apex.rule.apexunit.ApexUnitTestClassShouldHaveAsserts`
and `net.sourceforge.pmd.lang.apex.rule.apexunit.ApexUnitTestShouldNotUseSeeAllDataTrue` have been
renamed to `ApexUnitTestClassShouldHaveAssertsRule` and `ApexUnitTestShouldNotUseSeeAllDataTrueRule`,
respectively. This is to comply with the naming convention, that each rule class should be suffixed with "Rule".
This change has no impact on custom rulesets, since the rule names themselves didn't change.
* The never implemented method `PMD.processFiles(PMDConfiguration, RuleSetFactory, Collection<File>, RuleContext, ProgressMonitor)` along with the interface `ProgressMonitor` has been removed.
* The method `PMD.setupReport(RuleSets, RuleContext, String)` is gone. It was used to report dysfunctional
rules. But PMD does this now automatically before processing the files, so there is no need for this
method anymore.
* All APIs deprecated in older versions are now removed. This includes:
* `Renderer.getPropertyDefinitions`
* `AbstractRenderer.defineProperty(String, String)`
* `AbstractRenderer.propertyDefinitions`
* `ReportListener`
* `Report.addListener(ReportListener)`
* `SynchronizedReportListener`
* `CPDConfiguration.CPDConfiguration(int, Language, String)`
* `CPDConfiguration.getRendererFromString(String)`
* `StreamUtil`
* `StringUtil.appendXmlEscaped(StringBuilder, String)`
* `StringUtil.htmlEncode(String)`
* Several methods in `net.sourceforge.pmd.util.CollectionUtil` have been deprecated and will be removed in PMD 7.0.0. In particular:
* `CollectionUtil.addWithoutDuplicates(T[], T)`
* `CollectionUtil.addWithoutDuplicates(T[], T[])`
* `CollectionUtil.areSemanticEquals(T[], T[])`
* `CollectionUtil.areEqual(Object, Object)`
* `CollectionUtil.arraysAreEqual(Object, Object)`
* `CollectionUtil.valuesAreTransitivelyEqual(Object[], Object[])`
* Several methods in `net.sourceforge.pmd.util.StringUtil` have been deprecated and will be removed in PMD 7.0.0. In particular:
* `StringUtil.startsWithAny(String, String[])`
* `StringUtil.isNotEmpty(String)`
* `StringUtil.isEmpty(String)`
* `StringUtil.isMissing(String)`
* `StringUtil.areSemanticEquals(String, String)`
* `StringUtil.replaceString(String, String, String)`
* `StringUtil.replaceString(String, char, String)`
* `StringUtil.substringsOf(String, char)`
* `StringUtil.substringsOf(String, String)`
* `StringUtil.asStringOn(StringBuffer, Iterator, String)`
* `StringUtil.asStringOn(StringBuilder, Object[], String)`
* `StringUtil.lpad(String, int)`
2017-08-28 16:14:24 -03:00
* The class `net.sourceforge.pmd.lang.java.typeresolution.typedefinition.JavaTypeDefinition` is now abstract, and has been enhanced
to provide several new methods.
2017-04-29 20:22:28 +02:00
### External Contributions
2017-05-01 16:51:07 +02:00
* [#287](https://github.com/pmd/pmd/pull/287): \[apex] Make Rule suppression work - [Robert Sösemann](https://github.com/up2go-rsoesemann)
* [#420](https://github.com/pmd/pmd/pull/420): \[java] Fix UR anomaly in assert statements - [Clément Fournier](https://github.com/oowekyala)
2017-07-10 20:47:48 +02:00
* [#482](https://github.com/pmd/pmd/pull/482): \[java] Metrics testing framework + improved capabilities for metrics - [Clément Fournier](https://github.com/oowekyala)
* [#484](https://github.com/pmd/pmd/pull/484): \[core] Changed linux usage to a more unix like path - [patriksevallius](https://github.com/patriksevallius)
2017-07-08 16:25:46 -03:00
* [#486](https://github.com/pmd/pmd/pull/486): \[java] Add basic method typeresolution - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-11 15:55:56 -03:00
* [#492](https://github.com/pmd/pmd/pull/492): \[java] Typeresolution for overloaded methods - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-10 20:47:48 +02:00
* [#495](https://github.com/pmd/pmd/pull/495): \[core] Custom rule reinitialization code - [Clément Fournier](https://github.com/oowekyala)
2017-07-17 20:23:07 +02:00
* [#479](https://github.com/pmd/pmd/pull/479): \[core] Typesafe and immutable properties - [Clément Fournier](https://github.com/oowekyala)
2017-07-19 20:07:14 +02:00
* [#499](https://github.com/pmd/pmd/pull/499): \[java] Metrics memoization tests - [Clément Fournier](https://github.com/oowekyala)
2017-07-13 15:42:30 -03:00
* [#501](https://github.com/pmd/pmd/pull/501): \[java] Add support for most specific vararg method type resolution - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-21 12:50:52 -03:00
* [#502](https://github.com/pmd/pmd/pull/502): \[java] Add support for static field type resolution - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-21 11:18:18 +02:00
* [#505](https://github.com/pmd/pmd/pull/505): \[java] Followup on metrics - [Clément Fournier](https://github.com/oowekyala)
2017-07-24 12:42:38 -03:00
* [#506](https://github.com/pmd/pmd/pull/506): \[java] Add reduction rules to type inference - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-25 21:41:13 +02:00
* [#511](https://github.com/pmd/pmd/pull/511): \[core] Prepare abstraction of the metrics framework - [Clément Fournier](https://github.com/oowekyala)
2017-07-24 14:40:52 -03:00
* [#512](https://github.com/pmd/pmd/pull/512): \[java] Add incorporation to type inference - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-24 14:54:57 -03:00
* [#513](https://github.com/pmd/pmd/pull/513): \[java] Fix for maximally specific method selection - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-25 11:40:46 -03:00
* [#514](https://github.com/pmd/pmd/pull/514): \[java] Add static method type resolution - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-28 14:53:52 +02:00
* [#517](https://github.com/pmd/pmd/pull/517): \[doc] Metrics documentation - [Clément Fournier](https://github.com/oowekyala)
2017-08-28 20:31:08 +02:00
* [#518](https://github.com/pmd/pmd/pull/518): \[core] Properties refactoring: factorized enumerated property - [Clément Fournier](https://github.com/oowekyala)
2017-07-28 14:45:38 +02:00
* [#523](https://github.com/pmd/pmd/pull/523): \[java] Npath complexity metric and rule - [Clément Fournier](https://github.com/oowekyala)
2017-08-02 16:38:18 -03:00
* [#524](https://github.com/pmd/pmd/pull/524): \[java] Add support for explicit type arguments with method invocation - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-07-29 18:51:43 -03:00
* [#525](https://github.com/pmd/pmd/pull/525): \[core] Fix line ending and not ignored files issues - [Matias Comercio](https://github.com/MatiasComercio)
2017-07-29 19:01:25 -03:00
* [#528](https://github.com/pmd/pmd/pull/528): \[core] Fix typo - [Ayoub Kaanich](https://github.com/kayoub5)
2017-08-13 12:07:15 +02:00
* [#529](https://github.com/pmd/pmd/pull/529): \[java] Abstracted the Java metrics framework - [Clément Fournier](https://github.com/oowekyala)
2017-07-29 18:54:44 -03:00
* [#530](https://github.com/pmd/pmd/pull/530): \[java] Fix issue #527: Lombok getter annotation on enum is not recognized correctly - [Clément Fournier](https://github.com/oowekyala)
2017-09-03 20:06:07 -03:00
* [#533](https://github.com/pmd/pmd/pull/533): \[core] improve error message - [Dennis Kieselhorst](https://github.com/deki)
2017-08-01 11:24:16 -03:00
* [#535](https://github.com/pmd/pmd/pull/535): \[apex] Fix broken Apex visitor adapter - [Clément Fournier](https://github.com/oowekyala)
2017-08-06 22:22:17 +02:00
* [#542](https://github.com/pmd/pmd/pull/542): \[java] Metrics abstraction - [Clément Fournier](https://github.com/oowekyala)
2017-08-14 10:20:48 +02:00
* [#545](https://github.com/pmd/pmd/pull/545): \[apex] Apex metrics framework - [Clément Fournier](https://github.com/oowekyala)
2017-08-13 12:07:15 +02:00
* [#548](https://github.com/pmd/pmd/pull/548): \[java] Metrics documentation - [Clément Fournier](https://github.com/oowekyala)
2017-08-15 00:29:39 -03:00
* [#550](https://github.com/pmd/pmd/pull/550): \[java] Add basic resolution to type inference - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-08-19 18:32:49 +02:00
* [#553](https://github.com/pmd/pmd/pull/553): \[java] Refactored ParserTst into a static utility class + add getSourceFromClass - [Clément Fournier](https://github.com/oowekyala)
2017-08-16 14:15:46 -03:00
* [#554](https://github.com/pmd/pmd/pull/554): \[java] Fix #537: UnnecessaryParentheses fails to detect obvious scenario - [Clément Fournier](https://github.com/oowekyala)
2017-08-15 20:13:08 +02:00
* [#555](https://github.com/pmd/pmd/pull/555): \[java] Changed metrics/CyclomaticComplexityRule to use WMC when reporting classes - [Clément Fournier](https://github.com/oowekyala)
2017-08-16 15:16:44 -03:00
* [#556](https://github.com/pmd/pmd/pull/556): \[java] Fix #357: UncommentedEmptyConstructor consider annotations on Constructor - [Clément Fournier](https://github.com/oowekyala)
2017-08-15 20:36:33 +02:00
* [#557](https://github.com/pmd/pmd/pull/557): \[java] Fix NPath metric not counting ternaries correctly - [Clément Fournier](https://github.com/oowekyala)
2017-08-17 15:04:16 -03:00
* [#563](https://github.com/pmd/pmd/pull/563): \[java] Add support for basic method type inference for strict invocation - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-09-09 09:54:53 +02:00
* [#566](https://github.com/pmd/pmd/pull/566): \[java] New rule in migrating ruleset: ForLoopCanBeForeach - [Clément Fournier](https://github.com/oowekyala)
2017-08-21 22:08:29 +02:00
* [#567](https://github.com/pmd/pmd/pull/567): \[java] Last API change for metrics (metric options) - [Clément Fournier](https://github.com/oowekyala)
2017-08-24 11:15:12 -03:00
* [#570](https://github.com/pmd/pmd/pull/570): \[java] Model lower, upper and intersection types - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-08-23 20:39:05 +02:00
* [#573](https://github.com/pmd/pmd/pull/573): \[java] Data class rule - [Clément Fournier](https://github.com/oowekyala)
2017-08-26 10:56:20 +02:00
* [#576](https://github.com/pmd/pmd/pull/576): \[doc]\[java] Add hint for Guava users in InefficientEmptyStringCheck - [mmoehring](https://github.com/mmoehring)
* [#578](https://github.com/pmd/pmd/pull/578): \[java] Refactored god class rule - [Clément Fournier](https://github.com/oowekyala)
2017-08-28 16:14:24 -03:00
* [#579](https://github.com/pmd/pmd/pull/579): \[java] Update parsing to produce upper and lower bounds - [Bendegúz Nagy](https://github.com/WinterGrascph)
2017-08-26 11:05:41 +02:00
* [#580](https://github.com/pmd/pmd/pull/580): \[core] Add AbstractMetric to topple the class hierarchy of metrics - [Clément Fournier](https://github.com/oowekyala)
2017-08-25 15:01:37 -03:00
* [#581](https://github.com/pmd/pmd/pull/581): \[java] Relax AbstractClassWithoutAnyMethod when class is annotated by @AutoValue - [Niklas Baudy](https://github.com/vanniktech)
2017-08-29 19:54:34 +02:00
* [#583](https://github.com/pmd/pmd/pull/583): \[java] Documentation about writing metrics - [Clément Fournier](https://github.com/oowekyala)
2017-09-05 18:03:15 +02:00
* [#585](https://github.com/pmd/pmd/pull/585): \[java] Moved NcssCountRule to codesize.xml - [Clément Fournier](https://github.com/oowekyala)
2017-09-12 18:00:25 -03:00
* [#587](https://github.com/pmd/pmd/pull/587): \[core] Properties refactoring: Move static constants of ValueParser to class ValueParserConstants - [Clément Fournier](https://github.com/oowekyala)
2017-09-08 16:27:53 +02:00
* [#588](https://github.com/pmd/pmd/pull/588): \[java] XPath function to compute metrics - [Clément Fournier](https://github.com/oowekyala)
2017-09-09 18:55:29 -03:00
* [#598](https://github.com/pmd/pmd/pull/598): \[java] Fix #388: controversial.AvoidLiteralsInIfCondition 0.0 false positive - [Clément Fournier](https://github.com/oowekyala)
2017-09-29 10:41:09 +02:00
* [#602](https://github.com/pmd/pmd/pull/602): \[java] \[apex] Separate multifile analysis from metrics - [Clément Fournier](https://github.com/oowekyala)
2017-09-14 11:49:08 -03:00
* [#620](https://github.com/pmd/pmd/pull/620): \[core] Moved properties to n.s.pmd.properties - [Clément Fournier](https://github.com/oowekyala)
2017-10-08 20:00:36 -03:00
* [#625](https://github.com/pmd/pmd/pull/625): \[apex] empty code ruleset for apex - [Jan Aertgeerts](https://github.com/JAertgeerts)
2017-10-08 19:44:56 -03:00
* [#632](https://github.com/pmd/pmd/pull/632): \[apex] Add AvoidDirectAccessTriggerMap rule to the style set - [Jan Aertgeerts](https://github.com/JAertgeerts)
2017-09-30 18:40:00 -03:00
* [#644](https://github.com/pmd/pmd/pull/644): \[core] Prevent internal dev-properties from being displayed on CodeClimate renderer - [Filipe Esperandio](https://github.com/filipesperandio)
2017-10-09 15:48:40 -03:00
* [#660](https://github.com/pmd/pmd/pull/660): \[apex] avoid sosl in loops - [Jan Aertgeerts](https://github.com/JAertgeerts)
2017-10-18 23:55:25 -03:00
* [#661](https://github.com/pmd/pmd/pull/661): \[apex] avoid hardcoding id's - [Jan Aertgeerts](https://github.com/JAertgeerts)
2017-10-17 13:42:28 -03:00
* [#666](https://github.com/pmd/pmd/pull/666): \[java] Add DoNotExtendJavaLangThrowable rule - [Robert Painsi](https://github.com/robertpainsi)
2017-10-16 21:18:06 +02:00
* [#668](https://github.com/pmd/pmd/pull/668): \[core] Fix javadoc warnings on pmd-core - [Clément Fournier](https://github.com/oowekyala)
2017-11-04 19:39:31 -03:00
* [#669](https://github.com/pmd/pmd/pull/669): \[core] Builder pattern for properties - [Clément Fournier](https://github.com/oowekyala)
2017-10-18 11:45:26 -03:00
* [#675](https://github.com/pmd/pmd/pull/675): \[java] Fix in Java grammar: Try with final resource node error - [Gonzalo Ibars Ingman](https://github.com/gibarsin)
2017-10-30 16:55:40 -03:00
* [#679](https://github.com/pmd/pmd/pull/679): \[core] Token scheme generalization - [Gonzalo Ibars Ingman](https://github.com/gibarsin)
2017-10-28 18:14:16 -03:00
* [#694](https://github.com/pmd/pmd/pull/694): \[core] Add minor fixes to root pom - [Matias Comercio](https://github.com/MatiasComercio)
2017-11-04 19:47:58 -03:00
* [#696](https://github.com/pmd/pmd/pull/696): \[core] Add remove operation over nodes - [Matias Comercio](https://github.com/MatiasComercio)
2017-11-09 21:57:21 +01:00
* [#722](https://github.com/pmd/pmd/pull/722): \[java] Move NPathComplexity from metrics to design - [Clément Fournier](https://github.com/oowekyala)
2017-08-28 16:14:24 -03:00