Prepare next development version

This commit is contained in:
Andreas Dangel
2018-09-30 10:47:07 +02:00
parent d8586382f6
commit 97fd30418e
3 changed files with 157 additions and 125 deletions

View File

@ -1,8 +1,8 @@
repository: pmd/pmd
pmd:
version: 6.8.0
date: 30-September-2018
version: 6.9.0
date: ??-????-2018
release_type: minor
output: web

View File

@ -10,137 +10,15 @@ The PMD team is pleased to announce PMD {{ site.pmd.version }}.
This is a {{ site.pmd.release_type }} release.
{% tocmaker %}
{% tocmaker is_release_notes_processor %}
### New and noteworthy
#### Drawing a line between private and public API
Until now, all released public members and types were implicitly considered part
of PMD's public API, including inheritance-specific members (protected members, abstract methods).
We have maintained those APIs with the goal to preserve full binary compatibility between minor releases,
only breaking those APIs infrequently, for major releases.
In order to allow PMD to move forward at a faster pace, this implicit contract will
be invalidated with PMD 7.0.0. We now introduce more fine-grained distinctions between
the type of compatibility support we guarantee for our libraries, and ways to make
them explicit to clients of PMD.
###### `.internal` packages and `@InternalApi` annotation
*Internal API* is meant for use *only* by the main PMD codebase. Internal types and methods
may be modified in any way, or even removed, at any time.
Any API in a package that contains an `.internal` segment is considered internal.
The `@InternalApi` annotation will be used for APIs that have to live outside of
these packages, e.g. methods of a public type that shouldn't be used outside of PMD (again,
these can be removed anytime).
###### `@ReservedSubclassing`
Types marked with the `@ReservedSubclassing` annotation are only meant to be subclassed
by classes within PMD. As such, we may add new abstract methods, or remove protected methods,
at any time. All published public members remain supported. The annotation is *not* inherited, which
means a reserved interface doesn't prevent its implementors to be subclassed.
###### `@Experimental`
APIs marked with the `@Experimental` annotation at the class or method level are subject to change.
They can be modified in any way, or even removed, at any time. You should not use or rely
on them in any production code. They are purely to allow broad testing and feedback.
###### `@Deprecated`
APIs marked with the `@Deprecated` annotation at the class or method level will remain supported
until the next major release but it is recommended to stop using them.
###### The transition
*All currently supported APIs will remain so until 7.0.0*. All APIs that are to be moved to
`.internal` packages or hidden will be tagged `@InternalApi` before that major release, and
the breaking API changes will be performed in 7.0.0.
#### Quickstart Ruleset
PMD 6.8.0 provides a first quickstart ruleset for Java, which you can use as a base ruleset to get your
custom ruleset started. You can reference it with `rulesets/java/quickstart.xml`.
You are strongly encouraged to [create your own ruleset](https://pmd.github.io/pmd-6.7.0/pmd_userdocs_making_rulesets.html)
though.
The quickstart ruleset has the intention, to be useful out-of-the-box for many projects. Therefore it
references only rules, that are most likely to apply everywhere.
Any feedback would be greatly appreciated.
#### New Rules
* The new Apex rule {% rule apex/documentation/ApexDoc %} (`apex-documentation`)
enforces the inclusion of ApexDoc on classes, interfaces, properties and methods; as well as some
sanity rules for such docs (no missing parameters, parameters' order, and return value). By default,
method overrides and test classes are allowed to not include ApexDoc.
#### Modified Rules
* The rule {% rule java/errorprone/MissingSerialVersionUID %} (`java-errorprone`) has been modified
in order to recognize also missing `serialVersionUID` fields in abstract classes, if they are serializable.
Each individual class in the inheritance chain needs an own serialVersionUID field. See also [Should an abstract class have a serialVersionUID](https://stackoverflow.com/questions/893259/should-an-abstract-class-have-a-serialversionuid).
This change might lead to additional violations in existing code bases.
#### PLSQL
The grammar for PLSQL has been revamped in order to fully parse `SELECT INTO`, `UPDATE`, and `DELETE`
statements. Previously such statements have been simply skipped ahead, now PMD is parsing them, giving access
to the individual parts of a SELECT-statement, such as the Where-Clause. This might produce new parsing errors
where PMD previously could successfully parse PLSQL code. If this happens, please report a new [issue](https://github.com/pmd/pmd/issues/new) to get this problem fixed.
### Fixed Issues
* apex-bestpractices
* [#1348](https://github.com/pmd/pmd/issues/1348): \[apex] AvoidGlobalModifierRule gives warning even when its a webservice - false positive
* java-codestyle
* [#1329](https://github.com/pmd/pmd/issues/1329): \[java] FieldNamingConventions: false positive in serializable class with serialVersionUID
* [#1334](https://github.com/pmd/pmd/issues/1334): \[java] LinguisticNaming should support AtomicBooleans
* java-errorprone
* [#1350](https://github.com/pmd/pmd/issues/1350): \[java] MissingSerialVersionUID false-positive on interfaces
* [#1352](https://github.com/pmd/pmd/issues/1352): \[java] MissingSerialVersionUID false-negative with abstract classes
* java-performance
* [#1325](https://github.com/pmd/pmd/issues/1325): \[java] False positive in ConsecutiveLiteralAppends
* plsql
* [#1279](https://github.com/pmd/pmd/pull/1279): \[plsql] Support for SELECT INTO
### API Changes
* A couple of methods and fields in `net.sourceforge.pmd.properties.AbstractPropertySource` have been
deprecated, as they are replaced by already existing functionality or expose internal implementation
details: `propertyDescriptors`, `propertyValuesByDescriptor`,
`copyPropertyDescriptors()`, `copyPropertyValues()`, `ignoredProperties()`, `usesDefaultValues()`,
`useDefaultValueFor()`.
* Some methods in `net.sourceforge.pmd.properties.PropertySource` have been deprecated as well:
`usesDefaultValues()`, `useDefaultValueFor()`, `ignoredProperties()`.
* The class `net.sourceforge.pmd.lang.rule.AbstractDelegateRule` has been deprecated and will
be removed with PMD 7.0.0. It is internally only in use by RuleReference.
* The default constructor of `net.sourceforge.pmd.lang.rule.RuleReference` has been deprecated
and will be removed with PMD 7.0.0. RuleReferences should only be created by providing a Rule and
a RuleSetReference. Furthermore the following methods are deprecated: `setRuleReference()`,
`hasOverriddenProperty()`, `usesDefaultValues()`, `useDefaultValueFor()`.
### External Contributions
* [#1309](https://github.com/pmd/pmd/pull/1309): \[core] \[CPD] Decouple Antlr Tokenizer implementation from any CPD language supported with Antlr - [Matías Fraga](https://github.com/matifraga)
* [#1314](https://github.com/pmd/pmd/pull/1314): \[apex] Add validation of ApexDoc comments - [Jeff Hube](https://github.com/jeffhube)
* [#1339](https://github.com/pmd/pmd/pull/1339): \[ci] Improve danger message - [BBG](https://github.com/djydewang)
* [#1340](https://github.com/pmd/pmd/pull/1340): \[java] Derive correct classname for non-public non-classes - [kris-scheibe](https://github.com/kris-scheibe)
* [#1357](https://github.com/pmd/pmd/pull/1357): \[doc] Improve Codacy description - [Daniel Reigada](https://github.com/DReigada)
{% endtocmaker %}

View File

@ -6,6 +6,160 @@ permalink: pmd_release_notes_old.html
Previous versions of PMD can be downloaded here:
http://sourceforge.net/projects/pmd/files/pmd/
## ??-??-2018 - 6.8.0
The PMD team is pleased to announce PMD 6.8.0.
This is a minor release.
### Table Of Contents
* [New and noteworthy](#new-and-noteworthy)
* [Drawing a line between private and public API](#drawing-a-line-between-private-and-public-api)
* [`.internal` packages and `@InternalApi` annotation](#`.internal`-packages-and-`@internalapi`-annotation)
* [`@ReservedSubclassing`](#`@reservedsubclassing`)
* [`@Experimental`](#`@experimental`)
* [`@Deprecated`](#`@deprecated`)
* [The transition](#the-transition)
* [Quickstart Ruleset](#quickstart-ruleset)
* [New Rules](#new-rules)
* [Modified Rules](#modified-rules)
* [PLSQL](#plsql)
* [Fixed Issues](#fixed-issues)
* [API Changes](#api-changes)
* [External Contributions](#external-contributions)
### New and noteworthy
#### Drawing a line between private and public API
Until now, all released public members and types were implicitly considered part
of PMD's public API, including inheritance-specific members (protected members, abstract methods).
We have maintained those APIs with the goal to preserve full binary compatibility between minor releases,
only breaking those APIs infrequently, for major releases.
In order to allow PMD to move forward at a faster pace, this implicit contract will
be invalidated with PMD 7.0.0. We now introduce more fine-grained distinctions between
the type of compatibility support we guarantee for our libraries, and ways to make
them explicit to clients of PMD.
###### `.internal` packages and `@InternalApi` annotation
*Internal API* is meant for use *only* by the main PMD codebase. Internal types and methods
may be modified in any way, or even removed, at any time.
Any API in a package that contains an `.internal` segment is considered internal.
The `@InternalApi` annotation will be used for APIs that have to live outside of
these packages, e.g. methods of a public type that shouldn't be used outside of PMD (again,
these can be removed anytime).
###### `@ReservedSubclassing`
Types marked with the `@ReservedSubclassing` annotation are only meant to be subclassed
by classes within PMD. As such, we may add new abstract methods, or remove protected methods,
at any time. All published public members remain supported. The annotation is *not* inherited, which
means a reserved interface doesn't prevent its implementors to be subclassed.
###### `@Experimental`
APIs marked with the `@Experimental` annotation at the class or method level are subject to change.
They can be modified in any way, or even removed, at any time. You should not use or rely
on them in any production code. They are purely to allow broad testing and feedback.
###### `@Deprecated`
APIs marked with the `@Deprecated` annotation at the class or method level will remain supported
until the next major release but it is recommended to stop using them.
###### The transition
*All currently supported APIs will remain so until 7.0.0*. All APIs that are to be moved to
`.internal` packages or hidden will be tagged `@InternalApi` before that major release, and
the breaking API changes will be performed in 7.0.0.
#### Quickstart Ruleset
PMD 6.8.0 provides a first quickstart ruleset for Java, which you can use as a base ruleset to get your
custom ruleset started. You can reference it with `rulesets/java/quickstart.xml`.
You are strongly encouraged to [create your own ruleset](https://pmd.github.io/pmd-6.7.0/pmd_userdocs_making_rulesets.html)
though.
The quickstart ruleset has the intention, to be useful out-of-the-box for many projects. Therefore it
references only rules, that are most likely to apply everywhere.
Any feedback would be greatly appreciated.
#### New Rules
* The new Apex rule [`ApexDoc`](https://pmd.github.io/pmd-6.8.0/pmd_rules_apex_documentation.html#apexdoc) (`apex-documentation`)
enforces the inclusion of ApexDoc on classes, interfaces, properties and methods; as well as some
sanity rules for such docs (no missing parameters, parameters' order, and return value). By default,
method overrides and test classes are allowed to not include ApexDoc.
#### Modified Rules
* The rule [`MissingSerialVersionUID`](https://pmd.github.io/pmd-6.8.0/pmd_rules_java_errorprone.html#missingserialversionuid) (`java-errorprone`) has been modified
in order to recognize also missing `serialVersionUID` fields in abstract classes, if they are serializable.
Each individual class in the inheritance chain needs an own serialVersionUID field. See also [Should an abstract class have a serialVersionUID](https://stackoverflow.com/questions/893259/should-an-abstract-class-have-a-serialversionuid).
This change might lead to additional violations in existing code bases.
#### PLSQL
The grammar for PLSQL has been revamped in order to fully parse `SELECT INTO`, `UPDATE`, and `DELETE`
statements. Previously such statements have been simply skipped ahead, now PMD is parsing them, giving access
to the individual parts of a SELECT-statement, such as the Where-Clause. This might produce new parsing errors
where PMD previously could successfully parse PLSQL code. If this happens, please report a new [issue](https://github.com/pmd/pmd/issues/new) to get this problem fixed.
### Fixed Issues
* apex-bestpractices
* [#1348](https://github.com/pmd/pmd/issues/1348): \[apex] AvoidGlobalModifierRule gives warning even when its a webservice - false positive
* java-codestyle
* [#1329](https://github.com/pmd/pmd/issues/1329): \[java] FieldNamingConventions: false positive in serializable class with serialVersionUID
* [#1334](https://github.com/pmd/pmd/issues/1334): \[java] LinguisticNaming should support AtomicBooleans
* java-errorprone
* [#1350](https://github.com/pmd/pmd/issues/1350): \[java] MissingSerialVersionUID false-positive on interfaces
* [#1352](https://github.com/pmd/pmd/issues/1352): \[java] MissingSerialVersionUID false-negative with abstract classes
* java-performance
* [#1325](https://github.com/pmd/pmd/issues/1325): \[java] False positive in ConsecutiveLiteralAppends
* plsql
* [#1279](https://github.com/pmd/pmd/pull/1279): \[plsql] Support for SELECT INTO
### API Changes
* A couple of methods and fields in `net.sourceforge.pmd.properties.AbstractPropertySource` have been
deprecated, as they are replaced by already existing functionality or expose internal implementation
details: `propertyDescriptors`, `propertyValuesByDescriptor`,
`copyPropertyDescriptors()`, `copyPropertyValues()`, `ignoredProperties()`, `usesDefaultValues()`,
`useDefaultValueFor()`.
* Some methods in `net.sourceforge.pmd.properties.PropertySource` have been deprecated as well:
`usesDefaultValues()`, `useDefaultValueFor()`, `ignoredProperties()`.
* The class `net.sourceforge.pmd.lang.rule.AbstractDelegateRule` has been deprecated and will
be removed with PMD 7.0.0. It is internally only in use by RuleReference.
* The default constructor of `net.sourceforge.pmd.lang.rule.RuleReference` has been deprecated
and will be removed with PMD 7.0.0. RuleReferences should only be created by providing a Rule and
a RuleSetReference. Furthermore the following methods are deprecated: `setRuleReference()`,
`hasOverriddenProperty()`, `usesDefaultValues()`, `useDefaultValueFor()`.
### External Contributions
* [#1309](https://github.com/pmd/pmd/pull/1309): \[core] \[CPD] Decouple Antlr Tokenizer implementation from any CPD language supported with Antlr - [Matías Fraga](https://github.com/matifraga)
* [#1314](https://github.com/pmd/pmd/pull/1314): \[apex] Add validation of ApexDoc comments - [Jeff Hube](https://github.com/jeffhube)
* [#1339](https://github.com/pmd/pmd/pull/1339): \[ci] Improve danger message - [BBG](https://github.com/djydewang)
* [#1340](https://github.com/pmd/pmd/pull/1340): \[java] Derive correct classname for non-public non-classes - [kris-scheibe](https://github.com/kris-scheibe)
* [#1357](https://github.com/pmd/pmd/pull/1357): \[doc] Improve Codacy description - [Daniel Reigada](https://github.com/DReigada)
## 02-September-2018 - 6.7.0
The PMD team is pleased to announce PMD 6.7.0.