From 9a37ab4962f6b18deecaad1dd53b1132e0806cf0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Sat, 18 Apr 2020 01:27:57 +0200
Subject: [PATCH 01/23] Deprecate parser options in some places
There is no way to introduce the new API
in a binary compatible change, so LVHandler::getDefaultParserOptions,
LVHandler::getParser and Parser::parse
will remain like this until 7.0 and be
broken.
---
.../java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java | 1 +
pmd-core/src/main/java/net/sourceforge/pmd/Rule.java | 4 ++++
pmd-core/src/main/java/net/sourceforge/pmd/lang/Parser.java | 4 ++++
.../main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java | 1 +
4 files changed, 10 insertions(+)
diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
index a660af6eef..7f66baf62e 100644
--- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
+++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
@@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.apex;
import net.sourceforge.pmd.lang.ParserOptions;
+@Deprecated
public class ApexParserOptions extends ParserOptions {
// empty class for now, since we don't have extra options for Apex
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
index 00eb948d7a..feab69e2fe 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
@@ -255,7 +255,11 @@ public interface Rule extends PropertySource {
* should return a new instance on each call.
*
* @return the parser options
+ *
+ * @deprecated This was never implemented and will never be. PMD
+ * cannot parse files once per rule.
*/
+ @Deprecated
ParserOptions getParserOptions();
/**
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/Parser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/Parser.java
index 7ece070e1a..3156d3561b 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/Parser.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/Parser.java
@@ -16,9 +16,13 @@ import net.sourceforge.pmd.lang.ast.ParseException;
* @author Pieter_Van_Raemdonck - Application Engineers NV/SA - www.ae.be
*/
public interface Parser {
+
/**
* Get the ParserOptions used by this Parser.
+ *
+ * @deprecated Parser options should be a parameter to {@link #parse(String, Reader)}
*/
+ @Deprecated
ParserOptions getParserOptions();
/**
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java
index b8aa8c7e05..463ac61b3c 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRule.java
@@ -229,6 +229,7 @@ public abstract class AbstractRule extends AbstractPropertySource implements Rul
* @see Rule#setPriority(RulePriority)
*/
@Override
+ @Deprecated
public ParserOptions getParserOptions() {
return new ParserOptions();
}
From 190addc1a9b3652ce016d91b50ee6b05d3389f18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Apr 2020 20:40:31 +0200
Subject: [PATCH 02/23] Replace usages of ApexXPathRule
---
.../main/resources/category/apex/bestpractices.xml | 2 +-
.../src/main/resources/category/apex/codestyle.xml | 10 +++++-----
.../main/resources/category/apex/errorprone.xml | 14 +++++++-------
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/pmd-apex/src/main/resources/category/apex/bestpractices.xml b/pmd-apex/src/main/resources/category/apex/bestpractices.xml
index f91fa5095a..44c49dda6b 100644
--- a/pmd-apex/src/main/resources/category/apex/bestpractices.xml
+++ b/pmd-apex/src/main/resources/category/apex/bestpractices.xml
@@ -173,7 +173,7 @@ trigger Accounts on Account (before insert, before update, before delete, after
since="6.18.0"
language="apex"
message="Calls to System.debug should specify a logging level."
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_bestpractices.html#debugsshoulduselogginglevel">
The first parameter of System.debug, when using the signature with two parameters, is a LoggingLevel enum.
diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml
index 0c0ea51a4a..0343db5512 100644
--- a/pmd-apex/src/main/resources/category/apex/codestyle.xml
+++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml
@@ -36,7 +36,7 @@ public class fooClass { } // This will be reported unless you change the regex
language="apex"
since="5.6.0"
message="Avoid using 'if...else' statements without curly braces"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">
Avoid using if..else statements without using surrounding braces. If the code formatting
@@ -74,7 +74,7 @@ else
language="apex"
since="5.6.0"
message="Avoid using if statements without curly braces"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">
Avoid using if statements without using braces to surround the code block. If the code
@@ -156,7 +156,7 @@ public class Foo {
language="apex"
since="5.6.0"
message="Avoid using 'for' statements without curly braces"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#forloopsmustusebraces">
Avoid using 'for' statements without using surrounding braces. If the code formatting or
@@ -267,7 +267,7 @@ public class Foo {
Apex allows the use of several variables declaration of the same type on one line. However, it
@@ -364,7 +364,7 @@ public class Foo {
language="apex"
since="5.6.0"
message="Avoid using 'while' statements without curly braces"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#whileloopsmustusebraces">
Avoid using 'while' statements without using braces to surround the code block. If the code
diff --git a/pmd-apex/src/main/resources/category/apex/errorprone.xml b/pmd-apex/src/main/resources/category/apex/errorprone.xml
index ecea64c472..7ede809e3b 100644
--- a/pmd-apex/src/main/resources/category/apex/errorprone.xml
+++ b/pmd-apex/src/main/resources/category/apex/errorprone.xml
@@ -52,7 +52,7 @@ public class Foo {
Avoid directly accessing Trigger.old and Trigger.new as it can lead to a bug. Triggers should be bulkified and iterate through the map to handle the actions for each item separately.
@@ -112,7 +112,7 @@ public without sharing class Foo {
language="apex"
since="6.0.0"
message="Avoid empty catch blocks"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptycatchblock">
Empty Catch Block finds instances where an exception is caught, but nothing is done.
@@ -148,7 +148,7 @@ public void doSomething() {
language="apex"
since="6.0.0"
message="Avoid empty 'if' statements"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptyifstmt">
Empty If Statement finds instances where a condition is checked but nothing is done about it.
@@ -182,7 +182,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty block statements."
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptystatementblock">
Empty block statements serve no purpose and should be removed.
@@ -218,7 +218,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty try or finally blocks"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptytryorfinallyblock">
Avoid empty try or finally blocks - what's the point?
@@ -263,7 +263,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty 'while' statements"
- class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
+ class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptywhilestmt">
Empty While Statement finds all instances where a while statement does nothing.
@@ -338,7 +338,7 @@ public class MyClass {
Test methods marked as a testMethod or annotated with @IsTest,
From 151a56cfa06d02430bab0ff00d720b749b5a3ec2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Apr 2020 20:41:49 +0200
Subject: [PATCH 03/23] Deprecate other custom XPath rules
---
.../pmd/lang/ecmascript/rule/EcmascriptXPathRule.java | 5 ++++-
.../java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java | 4 ++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/rule/EcmascriptXPathRule.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/rule/EcmascriptXPathRule.java
index 4b5ea7f839..86bac22a3f 100644
--- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/rule/EcmascriptXPathRule.java
+++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/rule/EcmascriptXPathRule.java
@@ -12,7 +12,10 @@ import net.sourceforge.pmd.lang.ecmascript.EcmascriptParserOptions.Version;
import net.sourceforge.pmd.lang.rule.XPathRule;
import net.sourceforge.pmd.properties.PropertyDescriptor;
-
+/**
+ * @deprecated Parser options are deprecated, use {@link XPathRule} directly
+ */
+@Deprecated
public class EcmascriptXPathRule extends XPathRule {
private static final PropertyDescriptor RECORDING_COMMENTS_DESCRIPTOR = EcmascriptParserOptions.RECORDING_COMMENTS_DESCRIPTOR;
diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
index e833025a7d..ff9eb847ad 100644
--- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
+++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
@@ -11,6 +11,10 @@ import net.sourceforge.pmd.lang.xml.XmlLanguageModule;
import net.sourceforge.pmd.lang.xml.XmlParserOptions;
import net.sourceforge.pmd.properties.BooleanProperty;
+/**
+ * @deprecated Parser options are deprecated, use {@link XPathRule} directly
+ */
+@Deprecated
public class XmlXPathRule extends XPathRule {
public static final BooleanProperty COALESCING_DESCRIPTOR = XmlParserOptions.COALESCING_DESCRIPTOR;
From 25d59beb378987de895fd239b0ff4c6a1ddefbef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Apr 2020 20:45:34 +0200
Subject: [PATCH 04/23] Revert changes to apex rules
Someone may be using those properties, this would
be a breaking change
---
.../pmd/lang/apex/ApexParserOptions.java | 3 +++
.../main/resources/category/apex/bestpractices.xml | 2 +-
.../src/main/resources/category/apex/codestyle.xml | 10 +++++-----
.../main/resources/category/apex/errorprone.xml | 14 +++++++-------
.../lang/ecmascript/EcmascriptParserOptions.java | 5 ++++-
5 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
index 7f66baf62e..8d41b5d1ba 100644
--- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
+++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java
@@ -6,6 +6,9 @@ package net.sourceforge.pmd.lang.apex;
import net.sourceforge.pmd.lang.ParserOptions;
+/**
+ * @deprecated Not useful
+ */
@Deprecated
public class ApexParserOptions extends ParserOptions {
diff --git a/pmd-apex/src/main/resources/category/apex/bestpractices.xml b/pmd-apex/src/main/resources/category/apex/bestpractices.xml
index 44c49dda6b..f91fa5095a 100644
--- a/pmd-apex/src/main/resources/category/apex/bestpractices.xml
+++ b/pmd-apex/src/main/resources/category/apex/bestpractices.xml
@@ -173,7 +173,7 @@ trigger Accounts on Account (before insert, before update, before delete, after
since="6.18.0"
language="apex"
message="Calls to System.debug should specify a logging level."
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_bestpractices.html#debugsshoulduselogginglevel">
The first parameter of System.debug, when using the signature with two parameters, is a LoggingLevel enum.
diff --git a/pmd-apex/src/main/resources/category/apex/codestyle.xml b/pmd-apex/src/main/resources/category/apex/codestyle.xml
index 0343db5512..0c0ea51a4a 100644
--- a/pmd-apex/src/main/resources/category/apex/codestyle.xml
+++ b/pmd-apex/src/main/resources/category/apex/codestyle.xml
@@ -36,7 +36,7 @@ public class fooClass { } // This will be reported unless you change the regex
language="apex"
since="5.6.0"
message="Avoid using 'if...else' statements without curly braces"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#ifelsestmtsmustusebraces">
Avoid using if..else statements without using surrounding braces. If the code formatting
@@ -74,7 +74,7 @@ else
language="apex"
since="5.6.0"
message="Avoid using if statements without curly braces"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#ifstmtsmustusebraces">
Avoid using if statements without using braces to surround the code block. If the code
@@ -156,7 +156,7 @@ public class Foo {
language="apex"
since="5.6.0"
message="Avoid using 'for' statements without curly braces"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#forloopsmustusebraces">
Avoid using 'for' statements without using surrounding braces. If the code formatting or
@@ -267,7 +267,7 @@ public class Foo {
Apex allows the use of several variables declaration of the same type on one line. However, it
@@ -364,7 +364,7 @@ public class Foo {
language="apex"
since="5.6.0"
message="Avoid using 'while' statements without curly braces"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_codestyle.html#whileloopsmustusebraces">
Avoid using 'while' statements without using braces to surround the code block. If the code
diff --git a/pmd-apex/src/main/resources/category/apex/errorprone.xml b/pmd-apex/src/main/resources/category/apex/errorprone.xml
index 7ede809e3b..ecea64c472 100644
--- a/pmd-apex/src/main/resources/category/apex/errorprone.xml
+++ b/pmd-apex/src/main/resources/category/apex/errorprone.xml
@@ -52,7 +52,7 @@ public class Foo {
Avoid directly accessing Trigger.old and Trigger.new as it can lead to a bug. Triggers should be bulkified and iterate through the map to handle the actions for each item separately.
@@ -112,7 +112,7 @@ public without sharing class Foo {
language="apex"
since="6.0.0"
message="Avoid empty catch blocks"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptycatchblock">
Empty Catch Block finds instances where an exception is caught, but nothing is done.
@@ -148,7 +148,7 @@ public void doSomething() {
language="apex"
since="6.0.0"
message="Avoid empty 'if' statements"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptyifstmt">
Empty If Statement finds instances where a condition is checked but nothing is done about it.
@@ -182,7 +182,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty block statements."
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptystatementblock">
Empty block statements serve no purpose and should be removed.
@@ -218,7 +218,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty try or finally blocks"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptytryorfinallyblock">
Avoid empty try or finally blocks - what's the point?
@@ -263,7 +263,7 @@ public class Foo {
language="apex"
since="6.0.0"
message="Avoid empty 'while' statements"
- class="net.sourceforge.pmd.lang.rule.XPathRule"
+ class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_errorprone.html#emptywhilestmt">
Empty While Statement finds all instances where a while statement does nothing.
@@ -338,7 +338,7 @@ public class MyClass {
Test methods marked as a testMethod or annotated with @IsTest,
diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptParserOptions.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptParserOptions.java
index 981ce19fb5..602813e010 100644
--- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptParserOptions.java
+++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptParserOptions.java
@@ -13,7 +13,10 @@ import net.sourceforge.pmd.lang.ParserOptions;
import net.sourceforge.pmd.properties.BooleanProperty;
import net.sourceforge.pmd.properties.EnumeratedProperty;
-
+/**
+ * @deprecated Will be removed in 7.0 TODO refactor this into language versions?
+ */
+@Deprecated
public class EcmascriptParserOptions extends ParserOptions {
public enum Version {
From 8fe29dfee7228f68daf7ef7123ff075b74da073c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Apr 2020 20:49:37 +0200
Subject: [PATCH 05/23] Deprecations in XML module
---
pmd-core/src/main/java/net/sourceforge/pmd/Rule.java | 3 ++-
.../net/sourceforge/pmd/lang/xml/XmlParserOptions.java | 5 +++++
.../net/sourceforge/pmd/lang/xml/rule/AbstractXmlRule.java | 7 +++++++
.../net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java | 7 +++++++
4 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
index feab69e2fe..ae1b811752 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Rule.java
@@ -257,7 +257,8 @@ public interface Rule extends PropertySource {
* @return the parser options
*
* @deprecated This was never implemented and will never be. PMD
- * cannot parse files once per rule.
+ * cannot parse files once per rule. Let this method assume
+ * its default by not overriding it.
*/
@Deprecated
ParserOptions getParserOptions();
diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
index 078105bdac..14441bcbc5 100644
--- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
+++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
@@ -16,6 +16,11 @@ import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.lang.ParserOptions;
import net.sourceforge.pmd.properties.BooleanProperty;
+/**
+ * @deprecated Parser options will be removed with 7.0, these options
+ * will assume their default values then.
+ */
+@Deprecated
public class XmlParserOptions extends ParserOptions {
// Note: The UI order values are chosen to be larger than those built into
diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/AbstractXmlRule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/AbstractXmlRule.java
index c144118c6d..ec76a99611 100644
--- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/AbstractXmlRule.java
+++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/AbstractXmlRule.java
@@ -25,12 +25,19 @@ import net.sourceforge.pmd.properties.BooleanProperty;
*/
public class AbstractXmlRule extends AbstractRule implements ImmutableLanguage {
+ @Deprecated
public static final BooleanProperty COALESCING_DESCRIPTOR = XmlParserOptions.COALESCING_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty EXPAND_ENTITY_REFERENCES_DESCRIPTOR = XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty IGNORING_COMMENTS_DESCRIPTOR = XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR = XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty NAMESPACE_AWARE_DESCRIPTOR = XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty VALIDATING_DESCRIPTOR = XmlParserOptions.VALIDATING_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty XINCLUDE_AWARE_DESCRIPTOR = XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR;
public AbstractXmlRule() {
diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
index ff9eb847ad..11baa84e60 100644
--- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
+++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/rule/XmlXPathRule.java
@@ -17,12 +17,19 @@ import net.sourceforge.pmd.properties.BooleanProperty;
@Deprecated
public class XmlXPathRule extends XPathRule {
+ @Deprecated
public static final BooleanProperty COALESCING_DESCRIPTOR = XmlParserOptions.COALESCING_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty EXPAND_ENTITY_REFERENCES_DESCRIPTOR = XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty IGNORING_COMMENTS_DESCRIPTOR = XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR = XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty NAMESPACE_AWARE_DESCRIPTOR = XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty VALIDATING_DESCRIPTOR = XmlParserOptions.VALIDATING_DESCRIPTOR;
+ @Deprecated
public static final BooleanProperty XINCLUDE_AWARE_DESCRIPTOR = XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR;
public XmlXPathRule() {
From 0609aac9d3f972a1cecdb218d94575c725944760 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 14:35:20 +0200
Subject: [PATCH 06/23] Deprecate AbstractParser
---
docs/pages/release_notes.md | 11 +++++++++++
.../net/sourceforge/pmd/lang/AbstractParser.java | 3 +++
.../pmd/lang/xml/XmlParserOptions.java | 16 ++++++++--------
3 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index b8f8783555..a9f58d3787 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -18,6 +18,17 @@ This is a {{ site.pmd.release_type }} release.
### API Changes
+#### Deprecated API
+
+- {% jdoc !!core::Rule#getParserOptions() %}
+- {% jdoc !!core::lang.Parser#getParserOptions() %}
+- {% jdoc !!core::lang.AbstractParser %}
+- {% jdoc apex::lang.apex.ApexParserOptions %}
+- {% jdoc xml::lang.xml.XmlParserOptions %}
+- {% jdoc xml::lang.xml.rule.XmlXpathRule %}
+- Properties of {% jdoc xml::lang.xml.rule.AbstractXmlRule %}
+- {% jdoc javascript::lang.ecmascript.EcmascriptParserOptions %}
+
### External Contributions
{% endtocmaker %}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractParser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractParser.java
index 870fb72440..edd6552f81 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractParser.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractParser.java
@@ -10,7 +10,10 @@ import java.io.Reader;
* This is a generic implementation of the Parser interface.
*
* @see Parser
+ *
+ * @deprecated This will become useless in PMD 7. Implement or use {@link Parser} directly
*/
+@Deprecated
public abstract class AbstractParser implements Parser {
protected final ParserOptions parserOptions;
diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
index 14441bcbc5..ad811f87f5 100644
--- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
+++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java
@@ -26,26 +26,26 @@ public class XmlParserOptions extends ParserOptions {
// Note: The UI order values are chosen to be larger than those built into
// XPathRule.
public static final BooleanProperty COALESCING_DESCRIPTOR = new BooleanProperty("coalescing",
- "Specifies that the XML parser convert CDATA nodes to Text nodes and append it to the adjacent (if any) text node.",
+ "deprecated!Specifies that the XML parser convert CDATA nodes to Text nodes and append it to the adjacent (if any) text node.",
Boolean.FALSE, 3.0f);
public static final BooleanProperty EXPAND_ENTITY_REFERENCES_DESCRIPTOR = new BooleanProperty(
- "expandEntityReferences", "Specifies that the XML parser expand entity reference nodes.", Boolean.TRUE,
+ "expandEntityReferences", "deprecated!Specifies that the XML parser expand entity reference nodes.", Boolean.TRUE,
4.0f);
public static final BooleanProperty IGNORING_COMMENTS_DESCRIPTOR = new BooleanProperty("ignoringComments",
- "Specifies that the XML parser ignore comments.", Boolean.FALSE, 5.0f);
+ "deprecated!Specifies that the XML parser ignore comments.", Boolean.FALSE, 5.0f);
public static final BooleanProperty IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR = new BooleanProperty(
"ignoringElementContentWhitespace",
- "Specifies that the XML parser eliminate whitespace in element content. Setting this to 'true' will force validating.",
+ "deprecated!Specifies that the XML parser eliminate whitespace in element content. Setting this to 'true' will force validating.",
Boolean.FALSE, 6.0f);
public static final BooleanProperty NAMESPACE_AWARE_DESCRIPTOR = new BooleanProperty("namespaceAware",
- "Specifies that the XML parser will provide support for XML namespaces.", Boolean.TRUE, 7.0f);
+ "deprecated!Specifies that the XML parser will provide support for XML namespaces.", Boolean.TRUE, 7.0f);
public static final BooleanProperty VALIDATING_DESCRIPTOR = new BooleanProperty("validating",
- "Specifies that the XML parser will validate documents as they are parsed. This only works for DTDs.",
+ "deprecated!Specifies that the XML parser will validate documents as they are parsed. This only works for DTDs.",
Boolean.FALSE, 8.0f);
public static final BooleanProperty XINCLUDE_AWARE_DESCRIPTOR = new BooleanProperty("xincludeAware",
- "Specifies that the XML parser will process XInclude markup.", Boolean.FALSE, 9.0f);
+ "deprecated!Specifies that the XML parser will process XInclude markup.", Boolean.FALSE, 9.0f);
public static final BooleanProperty LOOKUP_DESCRIPTOR_DTD = new BooleanProperty("xincludeAware",
- "Specifies whether XML parser will attempt to lookup the DTD.", Boolean.FALSE, 10.0f);
+ "deprecated!Specifies whether XML parser will attempt to lookup the DTD.", Boolean.FALSE, 10.0f);
public static final EntityResolver SILENT_ENTITY_RESOLVER = new EntityResolver() {
@Override
From 7ab1ab0a76cd617e63a64a87da975eabba205039 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Fri, 3 Jan 2020 03:24:07 +0100
Subject: [PATCH 07/23] Deprecate some methods on RuleContext
---
docs/pages/release_notes.md | 6 ++++++
.../main/java/net/sourceforge/pmd/RuleContext.java | 12 ++++++++++++
2 files changed, 18 insertions(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index b8f8783555..12846302fd 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -18,6 +18,12 @@ This is a {{ site.pmd.release_type }} release.
### API Changes
+#### Deprecated API
+
+- {% jdoc !!core::RuleContext#removeAttribute(java.lang.String) %}
+- {% jdoc !!core::RuleContext#getAttribute(java.lang.String) %}
+- {% jdoc !!core::RuleContext#setAttribute(java.lang.String, java.lang.Object) %}
+
### External Contributions
{% endtocmaker %}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/RuleContext.java b/pmd-core/src/main/java/net/sourceforge/pmd/RuleContext.java
index f7132e7db9..76f30aae84 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/RuleContext.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/RuleContext.java
@@ -167,7 +167,11 @@ public class RuleContext {
* null
* @return true
if the attribute was set, false
* otherwise.
+ *
+ * @deprecated Stateful methods of the rule context will be removed.
+ * Their interaction with incremental analysis are unspecified.
*/
+ @Deprecated
public boolean setAttribute(String name, Object value) {
if (name == null) {
throw new IllegalArgumentException("Parameter 'name' cannot be null.");
@@ -194,7 +198,11 @@ public class RuleContext {
* The attribute name.
* @return The current attribute value, or null
if the
* attribute does not exist.
+ *
+ * @deprecated Stateful methods of the rule context will be removed.
+ * Their interaction with incremental analysis are unspecified.
*/
+ @Deprecated
public Object getAttribute(String name) {
return this.attributes.get(name);
}
@@ -215,7 +223,11 @@ public class RuleContext {
* The attribute name.
* @return The current attribute value, or null
if the
* attribute does not exist.
+ *
+ * @deprecated Stateful methods of the rule context will be removed.
+ * Their interaction with incremental analysis are unspecified.
*/
+ @Deprecated
public Object removeAttribute(String name) {
return this.attributes.remove(name);
}
From f62a411a45ee94bb8ae629c5fc36b21c97e46b05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 14:48:02 +0200
Subject: [PATCH 08/23] Deprecate some Report methods
---
docs/pages/release_notes.md | 7 +++++++
.../src/main/java/net/sourceforge/pmd/Report.java | 12 ++++++++++++
2 files changed, 19 insertions(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index b8f8783555..417a52096c 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -18,6 +18,13 @@ This is a {{ site.pmd.release_type }} release.
### API Changes
+#### Deprecated API
+
+- {% jdoc !!core::Report#treeSize() %}
+- {% jdoc !!core::Report#treeIterator() %}
+- {% jdoc !!core::Report#treeIsEmpty() %}
+- {% jdoc !!core::Report#getCountSummary() %}
+
### External Contributions
{% endtocmaker %}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
index f25a68bae1..bb7b192204 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
@@ -258,7 +258,10 @@ public class Report implements Iterable {
* Calculate a summary of violation counts per fully classified class name.
*
* @return violations per class name
+ *
+ * @deprecated This is too specific. Not every violation has a qualified name.
*/
+ @Deprecated
public Map getCountSummary() {
Map summary = new HashMap<>();
for (RuleViolation rv : violationTree) {
@@ -465,7 +468,10 @@ public class Report implements Iterable {
*
* @return true
if no violations have been reported,
* false
otherwise
+ *
+ * @deprecated The {@link ReportTree} is deprecated
*/
+ @Deprecated
public boolean treeIsEmpty() {
return !violationTree.iterator().hasNext();
}
@@ -474,7 +480,10 @@ public class Report implements Iterable {
* Returns an iteration over the reported violations.
*
* @return an iterator
+ *
+ * @deprecated The {@link ReportTree} is deprecated
*/
+ @Deprecated
public Iterator treeIterator() {
return violationTree.iterator();
}
@@ -506,7 +515,10 @@ public class Report implements Iterable {
* The number of violations.
*
* @return number of violations.
+ *
+ * @deprecated The {@link ReportTree} is deprecated
*/
+ @Deprecated
public int treeSize() {
return violationTree.size();
}
From ce3257309073b683299fc3cfcc4233e6c19b5300 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 14:55:01 +0200
Subject: [PATCH 09/23] Deprecate more methods
---
.../main/java/net/sourceforge/pmd/Report.java | 62 +++++++++++++++++--
1 file changed, 56 insertions(+), 6 deletions(-)
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
index bb7b192204..0095987b92 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
@@ -45,8 +45,8 @@ public class Report implements Iterable {
private final List violations = new ArrayList<>();
private final Set metrics = new HashSet<>();
private final List listeners = new ArrayList<>();
- private List errors;
- private List configErrors;
+ private List errors = new ArrayList<>();
+ private List configErrors = new ArrayList<>();
private Map linesToSuppress = new HashMap<>();
private long start;
private long end;
@@ -439,6 +439,10 @@ public class Report implements Iterable {
return metrics.iterator();
}
+ /**
+ * @deprecated Use {@link #getViolations()} or {@link #getProcessingErrors()}
+ */
+ @Deprecated
public boolean isEmpty() {
return !violations.iterator().hasNext() && !hasErrors();
}
@@ -448,9 +452,12 @@ public class Report implements Iterable {
*
* @return true
if there were any processing errors,
* false
otherwise
+ *
+ * @deprecated Use {@link #getProcessingErrors()}.isEmpty()
*/
+ @Deprecated
public boolean hasErrors() {
- return errors != null && !errors.isEmpty();
+ return getProcessingErrors().isEmpty();
}
/**
@@ -458,9 +465,12 @@ public class Report implements Iterable {
*
* @return true
if there were any configuration errors,
* false
otherwise
+ *
+ * @deprecated Use {@link #getConfigErrors()}.isEmpty()
*/
+ @Deprecated
public boolean hasConfigErrors() {
- return configErrors != null && !configErrors.isEmpty();
+ return getConfigErrors().isEmpty();
}
/**
@@ -488,27 +498,64 @@ public class Report implements Iterable {
return violationTree.iterator();
}
+ /**
+ * @deprecated Use {@link #getViolations()}
+ */
+ @Deprecated
@Override
public Iterator iterator() {
return violations.iterator();
}
+
+ /**
+ * Returns an unmodifiable list of violations that have been
+ * recorded until now.
+ */
+ public List getViolations() {
+ return Collections.unmodifiableList(violations);
+ }
+
+
+ /**
+ * Returns an unmodifiable list of processing errors that have been
+ * recorded until now.
+ */
+ public List getProcessingErrors() {
+ return Collections.unmodifiableList(errors);
+ }
+
+
+ /**
+ * Returns an unmodifiable list of configuration errors that have
+ * been recorded until now.
+ */
+ public List getConfigErrors() {
+ return Collections.unmodifiableList(configErrors);
+ }
+
+
/**
* Returns an iterator of the reported processing errors.
*
* @return the iterator
+ *
+ * @deprecated Use {@link #getProcessingErrors()}
*/
+ @Deprecated
public Iterator errors() {
- return errors == null ? Collections.emptyIterator() : errors.iterator();
+ return getProcessingErrors().iterator();
}
/**
* Returns an iterator of the reported configuration errors.
*
* @return the iterator
+ * @deprecated Use {@link #getConfigErrors()}
*/
+ @Deprecated
public Iterator configErrors() {
- return configErrors == null ? Collections.emptyIterator() : configErrors.iterator();
+ return getConfigErrors().iterator();
}
/**
@@ -527,7 +574,10 @@ public class Report implements Iterable {
* The number of violations.
*
* @return number of violations.
+ *
+ * @deprecated Use {@link #getViolations()}
*/
+ @Deprecated
public int size() {
return violations.size();
}
From 772bc1346ca41585a9fa8f38f28a9f050fdff952 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 19:33:01 +0200
Subject: [PATCH 10/23] Deprecate more things
---
docs/pages/release_notes.md | 8 +--
.../main/java/net/sourceforge/pmd/Report.java | 70 +++++++++----------
.../pmd/renderers/SummaryHTMLRenderer.java | 25 ++++++-
.../java/net/sourceforge/pmd/RuleSetTest.java | 4 +-
4 files changed, 64 insertions(+), 43 deletions(-)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index 417a52096c..bee7e4572f 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -20,10 +20,10 @@ This is a {{ site.pmd.release_type }} release.
#### Deprecated API
-- {% jdoc !!core::Report#treeSize() %}
-- {% jdoc !!core::Report#treeIterator() %}
-- {% jdoc !!core::Report#treeIsEmpty() %}
-- {% jdoc !!core::Report#getCountSummary() %}
+- Many methods of {% jdoc !!core::Report %}. They are replaced by accessors
+that produce a List. For example, {% jdoc !a!core::Report#iterator() %}
+(and implementing Iterable) and {% jdoc !a!core::Report#isEmpty() %} are both
+replaced by {% jdoc !a!core::Report#getViolations() %}.
### External Contributions
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
index 0095987b92..fe7319e1d4 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
@@ -45,12 +45,12 @@ public class Report implements Iterable {
private final List violations = new ArrayList<>();
private final Set metrics = new HashSet<>();
private final List listeners = new ArrayList<>();
- private List errors = new ArrayList<>();
- private List configErrors = new ArrayList<>();
+ private final List errors = new ArrayList<>();
+ private final List configErrors = new ArrayList<>();
private Map linesToSuppress = new HashMap<>();
private long start;
private long end;
- private List suppressedRuleViolations = new ArrayList<>();
+ private final List suppressedRuleViolations = new ArrayList<>();
/**
* Creates a new, initialized, empty report for the given file name.
@@ -272,6 +272,10 @@ public class Report implements Iterable {
return summary;
}
+ /**
+ * @deprecated The {@link ReportTree} is deprecated
+ */
+ @Deprecated
public ReportTree getViolationTree() {
return this.violationTree;
}
@@ -281,7 +285,10 @@ public class Report implements Iterable {
*
* @return a Map summarizing the Report: String (rule name) -> Integer (count
* of violations)
+ *
+ * @deprecated This is too specific, only used by one renderer.
*/
+ @Deprecated
public Map getSummary() {
Map summary = new HashMap<>();
for (RuleViolation rv : violations) {
@@ -305,10 +312,6 @@ public class Report implements Iterable {
listeners.add(listener);
}
- public List getSuppressedRuleViolations() {
- return suppressedRuleViolations;
- }
-
/**
* Adds a new rule violation to the report and notify the listeners.
*
@@ -360,9 +363,6 @@ public class Report implements Iterable {
* the error to add
*/
public void addConfigError(ConfigurationError error) {
- if (configErrors == null) {
- configErrors = new ArrayList<>();
- }
configErrors.add(error);
}
@@ -373,9 +373,6 @@ public class Report implements Iterable {
* the error to add
*/
public void addError(ProcessingError error) {
- if (errors == null) {
- errors = new ArrayList<>();
- }
errors.add(error);
}
@@ -389,29 +386,16 @@ public class Report implements Iterable {
* @see AbstractAccumulatingRenderer
*/
public void merge(Report r) {
- Iterator i = r.errors();
- while (i.hasNext()) {
- addError(i.next());
- }
- Iterator ce = r.configErrors();
- while (ce.hasNext()) {
- addConfigError(ce.next());
- }
- Iterator m = r.metrics();
- while (m.hasNext()) {
- addMetric(m.next());
- }
- Iterator v = r.iterator();
- while (v.hasNext()) {
- RuleViolation violation = v.next();
+ errors.addAll(r.errors);
+ configErrors.addAll(r.configErrors);
+ metrics.addAll(r.metrics);
+ suppressedRuleViolations.addAll(r.suppressedRuleViolations);
+
+ for (RuleViolation violation : r.getViolations()) {
int index = Collections.binarySearch(violations, violation, RuleViolationComparator.INSTANCE);
violations.add(index < 0 ? -index - 1 : index, violation);
violationTree.addRuleViolation(violation);
}
- Iterator s = r.getSuppressedRuleViolations().iterator();
- while (s.hasNext()) {
- suppressedRuleViolations.add(s.next());
- }
}
/**
@@ -457,7 +441,7 @@ public class Report implements Iterable {
*/
@Deprecated
public boolean hasErrors() {
- return getProcessingErrors().isEmpty();
+ return !getProcessingErrors().isEmpty();
}
/**
@@ -470,7 +454,7 @@ public class Report implements Iterable {
*/
@Deprecated
public boolean hasConfigErrors() {
- return getConfigErrors().isEmpty();
+ return !getConfigErrors().isEmpty();
}
/**
@@ -508,9 +492,16 @@ public class Report implements Iterable {
}
+ /**
+ * Returns an unmodifiable list of violations that were suppressed.
+ */
+ public List getSuppressedRuleViolations() {
+ return Collections.unmodifiableList(suppressedRuleViolations);
+ }
+
/**
* Returns an unmodifiable list of violations that have been
- * recorded until now.
+ * recorded until now. None of those violations were suppressed.
*/
public List getViolations() {
return Collections.unmodifiableList(violations);
@@ -587,7 +578,10 @@ public class Report implements Iterable {
* in the end.
*
* @see #getElapsedTimeInMillis()
+ *
+ * @deprecated Not used, {@link #getElapsedTimeInMillis()} will be removed
*/
+ @Deprecated
public void start() {
start = System.currentTimeMillis();
}
@@ -596,11 +590,17 @@ public class Report implements Iterable {
* Mark the end time of the report. This is ued to get the elapsed time.
*
* @see #getElapsedTimeInMillis()
+ * @deprecated Not used, {@link #getElapsedTimeInMillis()} will be removed
*/
+ @Deprecated
public void end() {
end = System.currentTimeMillis();
}
+ /**
+ * @deprecated Unused
+ */
+ @Deprecated
public long getElapsedTimeInMillis() {
return end - start;
}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/SummaryHTMLRenderer.java b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/SummaryHTMLRenderer.java
index fb6d8cf272..8f4881669f 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/renderers/SummaryHTMLRenderer.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/renderers/SummaryHTMLRenderer.java
@@ -5,9 +5,15 @@
package net.sourceforge.pmd.renderers;
import java.io.IOException;
+import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.lang3.mutable.MutableInt;
import net.sourceforge.pmd.PMD;
+import net.sourceforge.pmd.Report;
+import net.sourceforge.pmd.RuleViolation;
/**
* Renderer to a summarized HTML format.
@@ -59,8 +65,8 @@ public class SummaryHTMLRenderer extends AbstractAccumulatingRenderer {
writer.write("Summary
" + PMD.EOL);
writer.write("" + PMD.EOL);
writer.write("Rule name | Number of violations |
" + PMD.EOL);
- Map summary = report.getSummary();
- for (Map.Entry entry : summary.entrySet()) {
+ Map summary = getSummary(report);
+ for (Entry entry : summary.entrySet()) {
String ruleName = entry.getKey();
writer.write("");
writer.write(ruleName);
@@ -70,4 +76,19 @@ public class SummaryHTMLRenderer extends AbstractAccumulatingRenderer {
}
writer.write(" |
" + PMD.EOL);
}
+
+ private static Map getSummary(Report report) {
+ Map summary = new HashMap<>();
+ for (RuleViolation rv : report.getViolations()) {
+ String name = rv.getRule().getName();
+ MutableInt count = summary.get(name);
+ if (count == null) {
+ count = new MutableInt(0);
+ summary.put(name, count);
+ }
+ count.increment();
+ }
+ return summary;
+ }
+
}
diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetTest.java
index f19014a2c8..b07deb6b10 100644
--- a/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetTest.java
+++ b/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetTest.java
@@ -526,8 +526,8 @@ public class RuleSetTest {
context.setIgnoreExceptions(true); // the default
ruleset.apply(makeCompilationUnits(), context);
- assertTrue("Report should have processing errors", context.getReport().hasErrors());
- List errors = CollectionUtil.toList(context.getReport().errors());
+ List errors = context.getReport().getProcessingErrors();
+ assertTrue("Report should have processing errors", !errors.isEmpty());
assertEquals("Errors expected", 1, errors.size());
assertEquals("Wrong error message", "RuntimeException: Test exception while applying rule", errors.get(0).getMsg());
assertTrue("Should be a RuntimeException", errors.get(0).getError() instanceof RuntimeException);
From 091bff779325a067b05aa70fe9294e9088f519c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 23:42:29 +0200
Subject: [PATCH 11/23] Deprecate java stuff
---
.../net/sourceforge/pmd/lang/java/dfa/DataFlowFacade.java | 4 ++++
.../net/sourceforge/pmd/lang/java/dfa/JavaDataFlowNode.java | 4 ++++
.../pmd/lang/java/dfa/StatementAndBraceFinder.java | 3 +++
.../sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java | 2 ++
.../java/rule/errorprone/DataflowAnomalyAnalysisRule.java | 4 ++++
pmd-java/src/main/resources/category/java/errorprone.xml | 3 +++
6 files changed, 20 insertions(+)
diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/DataFlowFacade.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/DataFlowFacade.java
index 4068b26e12..647cb98357 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/DataFlowFacade.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/DataFlowFacade.java
@@ -5,6 +5,7 @@
package net.sourceforge.pmd.lang.java.dfa;
import net.sourceforge.pmd.lang.DataFlowHandler;
+import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
@@ -15,7 +16,10 @@ import net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter;
* constructors.
*
* @author raik
+ *
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class DataFlowFacade extends JavaParserVisitorAdapter {
private StatementAndBraceFinder sbf;
diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/JavaDataFlowNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/JavaDataFlowNode.java
index 76c3f0a054..74ba8dcf94 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/JavaDataFlowNode.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/JavaDataFlowNode.java
@@ -12,6 +12,10 @@ import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.java.ast.ASTConstructorDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
+/**
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class JavaDataFlowNode extends AbstractDataFlowNode {
public JavaDataFlowNode(List dataFlow, Node node) {
diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/StatementAndBraceFinder.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/StatementAndBraceFinder.java
index dc347ba523..8237c1fdba 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/StatementAndBraceFinder.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/StatementAndBraceFinder.java
@@ -9,6 +9,7 @@ import java.util.logging.Logger;
import net.sourceforge.pmd.lang.DataFlowHandler;
import net.sourceforge.pmd.lang.ast.Node;
+import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.dfa.Linker;
import net.sourceforge.pmd.lang.dfa.LinkerException;
import net.sourceforge.pmd.lang.dfa.NodeType;
@@ -43,7 +44,9 @@ import net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter;
* to link the nodes.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class StatementAndBraceFinder extends JavaParserVisitorAdapter {
private static final Logger LOGGER = Logger.getLogger(StatementAndBraceFinder.class.getName());
diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java
index e2e7cf9825..60839e3553 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/dfa/VariableAccessVisitor.java
@@ -36,7 +36,9 @@ import net.sourceforge.pmd.lang.symboltable.NameOccurrence;
*
* @since Created on 14.07.2004
* @author raik, Sven Jacob
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class VariableAccessVisitor extends JavaParserVisitorAdapter {
public void compute(ASTMethodDeclaration node) {
diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/DataflowAnomalyAnalysisRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/DataflowAnomalyAnalysisRule.java
index a229b4bb4d..252f4dce96 100644
--- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/DataflowAnomalyAnalysisRule.java
+++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/DataflowAnomalyAnalysisRule.java
@@ -22,6 +22,7 @@ import net.sourceforge.pmd.lang.dfa.pathfinder.Executable;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
+import net.sourceforge.pmd.lang.java.rule.bestpractices.UnusedAssignmentRule;
import net.sourceforge.pmd.properties.PropertyDescriptor;
import net.sourceforge.pmd.properties.PropertyFactory;
@@ -31,7 +32,10 @@ import net.sourceforge.pmd.properties.PropertyFactory;
*
* @author raik
* @author Sven Jacob
+ *
+ * @deprecated Replaced by {@link UnusedAssignmentRule}
*/
+@Deprecated
public class DataflowAnomalyAnalysisRule extends AbstractJavaRule implements Executable {
private static final PropertyDescriptor MAX_PATH_DESCRIPTOR
= PropertyFactory.intProperty("maxPaths")
diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml
index 8033820e7f..97c881d6e4 100644
--- a/pmd-java/src/main/resources/category/java/errorprone.xml
+++ b/pmd-java/src/main/resources/category/java/errorprone.xml
@@ -1145,12 +1145,15 @@ public class JuniorClass extends SeniorClass {
message="Found ''{0}''-anomaly for variable ''{1}'' (lines ''{2}''-''{3}'')."
class="net.sourceforge.pmd.lang.java.rule.errorprone.DataflowAnomalyAnalysisRule"
dfa="true"
+ deprecated="true"
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#dataflowanomalyanalysis">
The dataflow analysis tracks local definitions, undefinitions and references to variables on different paths on the data flow.
From those informations there can be found various problems.
1. DU - Anomaly: A recently defined variable is undefined. These anomalies may appear in normal source text.
2. DD - Anomaly: A recently defined variable is redefined. This is ominous but don't have to be a bug.
+
+This rule is deprecated. Use UnusedAssignment in category bestpractices instead.
5
From 520711a773d21fe2a762073127f2d7c0e5708d0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 23:47:05 +0200
Subject: [PATCH 12/23] Deprecate framework in core
---
.../net/sourceforge/pmd/lang/dfa/AbstractDataFlowNode.java | 2 ++
.../java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java | 6 ++++++
.../src/main/java/net/sourceforge/pmd/lang/dfa/Linker.java | 2 ++
.../java/net/sourceforge/pmd/lang/dfa/LinkerException.java | 2 ++
.../main/java/net/sourceforge/pmd/lang/dfa/NodeType.java | 2 ++
.../java/net/sourceforge/pmd/lang/dfa/SequenceChecker.java | 2 ++
.../net/sourceforge/pmd/lang/dfa/SequenceException.java | 2 ++
.../main/java/net/sourceforge/pmd/lang/dfa/StackObject.java | 4 ++++
.../sourceforge/pmd/lang/dfa/StartOrEndDataFlowNode.java | 5 +++++
.../main/java/net/sourceforge/pmd/lang/dfa/Structure.java | 2 ++
.../java/net/sourceforge/pmd/lang/dfa/VariableAccess.java | 2 ++
.../sourceforge/pmd/lang/dfa/VariableAccessException.java | 2 ++
.../sourceforge/pmd/lang/dfa/pathfinder/CurrentPath.java | 5 +++++
.../sourceforge/pmd/lang/dfa/pathfinder/DAAPathFinder.java | 2 ++
.../net/sourceforge/pmd/lang/dfa/pathfinder/Executable.java | 5 +++++
.../sourceforge/pmd/lang/dfa/pathfinder/PathElement.java | 5 +++++
16 files changed, 50 insertions(+)
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/AbstractDataFlowNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/AbstractDataFlowNode.java
index d5ae23be60..f6939d6cf9 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/AbstractDataFlowNode.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/AbstractDataFlowNode.java
@@ -15,7 +15,9 @@ import net.sourceforge.pmd.lang.ast.Node;
* Each data flow contains a set of DataFlowNodes.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public abstract class AbstractDataFlowNode implements DataFlowNode {
protected Node node;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
index 788edff78d..8d6f785cf5 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
@@ -8,6 +8,12 @@ import java.util.List;
import net.sourceforge.pmd.lang.ast.Node;
+/**
+ * @deprecated The data flow codebase will be removed from PMD in PMD 7.
+ * The feature is unreliable, hard to use, and the implementation is
+ * unmaintainable.
+ */
+@Deprecated
public interface DataFlowNode {
List getVariableAccess();
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Linker.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Linker.java
index f3601bdfe4..f05e2c13df 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Linker.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Linker.java
@@ -13,7 +13,9 @@ import net.sourceforge.pmd.lang.ast.Node;
/**
* @author raik Links data flow nodes to each other.
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class Linker {
private static final Logger LOGGER = Logger.getLogger(Linker.class.getName());
private static final String CLASS_NAME = Linker.class.getCanonicalName();
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/LinkerException.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/LinkerException.java
index a1300d7f03..6b82681b61 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/LinkerException.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/LinkerException.java
@@ -6,7 +6,9 @@ package net.sourceforge.pmd.lang.dfa;
/**
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class LinkerException extends Exception {
private static final long serialVersionUID = 3238380880636634352L;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/NodeType.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/NodeType.java
index 458bc11aa8..e19d9989da 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/NodeType.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/NodeType.java
@@ -8,7 +8,9 @@ package net.sourceforge.pmd.lang.dfa;
* Represents the type (DFA-wise) of a DataFlowNode.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public enum NodeType {
ROOT,
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceChecker.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceChecker.java
index 0c6942a4fa..b3065b2a24 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceChecker.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceChecker.java
@@ -19,7 +19,9 @@ import java.util.logging.Logger;
*
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class SequenceChecker {
private static final Logger LOGGER = Logger.getLogger(SequenceChecker.class.getName());
private static Status root;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceException.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceException.java
index fbcda58d9f..b54a2084ff 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceException.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/SequenceException.java
@@ -6,7 +6,9 @@ package net.sourceforge.pmd.lang.dfa;
/**
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class SequenceException extends Exception {
private static final long serialVersionUID = -3271242247181888687L;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StackObject.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StackObject.java
index 271e8984fb..0201a9d2ef 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StackObject.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StackObject.java
@@ -4,6 +4,10 @@
package net.sourceforge.pmd.lang.dfa;
+/**
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class StackObject {
private NodeType type;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StartOrEndDataFlowNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StartOrEndDataFlowNode.java
index 0eb7f33f98..bc5d1ab70a 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StartOrEndDataFlowNode.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/StartOrEndDataFlowNode.java
@@ -6,6 +6,11 @@ package net.sourceforge.pmd.lang.dfa;
import java.util.List;
+/**
+ *
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class StartOrEndDataFlowNode extends AbstractDataFlowNode {
private boolean isStartNode;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Structure.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Structure.java
index 188d1c2621..f4e531e1d3 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Structure.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/Structure.java
@@ -18,7 +18,9 @@ import net.sourceforge.pmd.lang.ast.Node;
* data flow and 2 stacks to link the nodes to each other.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class Structure {
private static final Logger LOGGER = Logger.getLogger(Structure.class.getName());
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccess.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccess.java
index 2676138530..1bd09bc69f 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccess.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccess.java
@@ -7,7 +7,9 @@ package net.sourceforge.pmd.lang.dfa;
/**
* @since Created on 14.07.2004
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class VariableAccess {
public static final int DEFINITION = 0;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccessException.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccessException.java
index 792d2cd366..ed3e4b69d7 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccessException.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/VariableAccessException.java
@@ -7,7 +7,9 @@ package net.sourceforge.pmd.lang.dfa;
/**
* @since Created on 14.07.2004
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class VariableAccessException extends Exception {
private static final long serialVersionUID = 7385246683069003412L;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/CurrentPath.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/CurrentPath.java
index 86827e2ff0..07fe39c934 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/CurrentPath.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/CurrentPath.java
@@ -11,6 +11,11 @@ import java.util.List;
import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.dfa.NodeType;
+/**
+ *
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class CurrentPath implements Iterable {
private final List list;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/DAAPathFinder.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/DAAPathFinder.java
index ae12cc02dd..ccc7e08090 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/DAAPathFinder.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/DAAPathFinder.java
@@ -15,7 +15,9 @@ import net.sourceforge.pmd.lang.dfa.NodeType;
*
* @author raik
* @since Created on 09.08.2004
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class DAAPathFinder {
private static final int MAX_PATHS = 5000;
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/Executable.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/Executable.java
index fb75065c1a..3a56747ff2 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/Executable.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/Executable.java
@@ -4,12 +4,17 @@
package net.sourceforge.pmd.lang.dfa.pathfinder;
+import net.sourceforge.pmd.lang.dfa.DataFlowNode;
+
/**
* Will be executed if PathFinder finds a path.
*
* @author raik
* @since Created on 09.08.2004
+ *
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public interface Executable {
void execute(CurrentPath path);
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/PathElement.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/PathElement.java
index 0bd6ebff9e..1fb3dc0000 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/PathElement.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/pathfinder/PathElement.java
@@ -6,6 +6,11 @@ package net.sourceforge.pmd.lang.dfa.pathfinder;
import net.sourceforge.pmd.lang.dfa.DataFlowNode;
+/**
+ *
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class PathElement {
public int currentChild;
From 01512447af3b86297a531ba9dff5c7b8e740befb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 23:48:30 +0200
Subject: [PATCH 13/23] Deprecate framework in plsql
---
.../net/sourceforge/pmd/lang/plsql/PLSQLDataFlowHandler.java | 4 ++++
.../net/sourceforge/pmd/lang/plsql/dfa/DataFlowFacade.java | 3 +++
.../net/sourceforge/pmd/lang/plsql/dfa/PLSQLDataFlowNode.java | 4 ++++
.../pmd/lang/plsql/dfa/StatementAndBraceFinder.java | 3 +++
.../sourceforge/pmd/lang/plsql/dfa/VariableAccessVisitor.java | 2 ++
5 files changed, 16 insertions(+)
diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLDataFlowHandler.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLDataFlowHandler.java
index 8f61ed7a51..9d8c451bc5 100644
--- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLDataFlowHandler.java
+++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/PLSQLDataFlowHandler.java
@@ -12,6 +12,10 @@ import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.plsql.ast.ASTLabelledStatement;
import net.sourceforge.pmd.lang.plsql.dfa.PLSQLDataFlowNode;
+/**
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class PLSQLDataFlowHandler implements DataFlowHandler {
@Override
public DataFlowNode createDataFlowNode(List dataFlow, Node node) {
diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/DataFlowFacade.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/DataFlowFacade.java
index cec8d75ecd..58f515e099 100644
--- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/DataFlowFacade.java
+++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/DataFlowFacade.java
@@ -8,6 +8,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import net.sourceforge.pmd.lang.DataFlowHandler;
+import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.plsql.ast.ASTCompoundTriggerBlock;
import net.sourceforge.pmd.lang.plsql.ast.ASTInput;
import net.sourceforge.pmd.lang.plsql.ast.ASTMethodDeclaration;
@@ -22,7 +23,9 @@ import net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitorAdapter;
* constructors.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class DataFlowFacade extends PLSQLParserVisitorAdapter {
private static final String CLASS_PATH = DataFlowFacade.class.getCanonicalName();
private static final Logger LOGGER = Logger.getLogger(DataFlowFacade.class.getName());
diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/PLSQLDataFlowNode.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/PLSQLDataFlowNode.java
index b1c4db193d..989b2973aa 100644
--- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/PLSQLDataFlowNode.java
+++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/PLSQLDataFlowNode.java
@@ -13,6 +13,10 @@ import net.sourceforge.pmd.lang.plsql.ast.ASTProgramUnit;
import net.sourceforge.pmd.lang.plsql.ast.ASTTriggerUnit;
import net.sourceforge.pmd.lang.plsql.ast.ASTTypeMethod;
+/**
+ * @deprecated See {@link DataFlowNode}
+ */
+@Deprecated
public class PLSQLDataFlowNode extends AbstractDataFlowNode {
public PLSQLDataFlowNode(List dataFlow, Node node) {
diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/StatementAndBraceFinder.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/StatementAndBraceFinder.java
index 626bd85ac5..1a7daaffce 100644
--- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/StatementAndBraceFinder.java
+++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/StatementAndBraceFinder.java
@@ -10,6 +10,7 @@ import java.util.logging.Logger;
import net.sourceforge.pmd.lang.DataFlowHandler;
import net.sourceforge.pmd.lang.ast.Node;
+import net.sourceforge.pmd.lang.dfa.DataFlowNode;
import net.sourceforge.pmd.lang.dfa.Linker;
import net.sourceforge.pmd.lang.dfa.LinkerException;
import net.sourceforge.pmd.lang.dfa.NodeType;
@@ -53,7 +54,9 @@ import net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitorAdapter;
* to link the nodes.
*
* @author raik
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class StatementAndBraceFinder extends PLSQLParserVisitorAdapter {
private static final Logger LOGGER = Logger.getLogger(StatementAndBraceFinder.class.getName());
diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/VariableAccessVisitor.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/VariableAccessVisitor.java
index 6c42815732..7a020537c5 100644
--- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/VariableAccessVisitor.java
+++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/dfa/VariableAccessVisitor.java
@@ -34,7 +34,9 @@ import net.sourceforge.pmd.lang.symboltable.NameOccurrence;
* type of access of a variable.
*
* @author raik, Sven Jacob
+ * @deprecated See {@link DataFlowNode}
*/
+@Deprecated
public class VariableAccessVisitor extends PLSQLParserVisitorAdapter {
public void compute(ASTMethodDeclaration node) {
From 658efc4fe3c023dad5a9d8edb6e6792a50f54285 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Tue, 28 Jul 2020 23:54:40 +0200
Subject: [PATCH 14/23] Update release notes
---
docs/pages/release_notes.md | 18 ++++++++++++++++++
.../sourceforge/pmd/lang/DataFlowHandler.java | 4 +---
.../sourceforge/pmd/lang/dfa/DataFlowNode.java | 4 ++--
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index b8f8783555..bcb55750e0 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -14,10 +14,28 @@ This is a {{ site.pmd.release_type }} release.
### New and noteworthy
+
+#### Deprecated Rules
+
+- The Java rule [`DataflowAnomalyAnalysis`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_errorprone.html#dataflowanomalyanalysis)
+is deprecated in favour of [`UnusedAssignment`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_bestpractices.html#unusedassignment),
+which was introduced in PMD 6.26.0.
+
### Fixed Issues
### API Changes
+#### Deprecated API
+
+- The dataflow codebase is deprecated for removal in PMD 7. This
+ includes all code in the following packages, and their subpackages:
+ - {% jdoc_package plsql::lang.plsql.dfa %}
+ - {% jdoc_package java::lang.java.dfa %}
+ - {% jdoc_package core::lang.dfa %}
+
+ and the class {% jdoc plsql::lang.plsql.PLSQLDataFlowHandler %}
+
+
### External Contributions
{% endtocmaker %}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/DataFlowHandler.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/DataFlowHandler.java
index b7c7dfab05..9b9d3bba48 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/DataFlowHandler.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/DataFlowHandler.java
@@ -6,16 +6,14 @@ package net.sourceforge.pmd.lang;
import java.util.List;
-import net.sourceforge.pmd.annotation.InternalApi;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.dfa.DataFlowNode;
/**
- * @deprecated This is internal API
+ * @deprecated See {@link DataFlowNode}
*/
@Deprecated
-@InternalApi
public interface DataFlowHandler {
DataFlowHandler DUMMY = new DataFlowHandler() {
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
index 8d6f785cf5..f5c2fda508 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/dfa/DataFlowNode.java
@@ -9,9 +9,9 @@ import java.util.List;
import net.sourceforge.pmd.lang.ast.Node;
/**
- * @deprecated The data flow codebase will be removed from PMD in PMD 7.
+ * @deprecated The data flow codebase will be removed in PMD 7.
* The feature is unreliable, hard to use, and the implementation is
- * unmaintainable.
+ * unmaintainable. See https://github.com/pmd/pmd/issues/2647
*/
@Deprecated
public interface DataFlowNode {
From 34d961b79421e6c84728a133dc7b6e502a1764b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Wed, 29 Jul 2020 17:44:55 +0200
Subject: [PATCH 15/23] Deprecate ReadableDuration
---
docs/pages/release_notes.md | 1 +
pmd-core/src/main/java/net/sourceforge/pmd/Report.java | 3 +++
2 files changed, 4 insertions(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index bee7e4572f..148cf916cb 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -24,6 +24,7 @@ This is a {{ site.pmd.release_type }} release.
that produce a List. For example, {% jdoc !a!core::Report#iterator() %}
(and implementing Iterable) and {% jdoc !a!core::Report#isEmpty() %} are both
replaced by {% jdoc !a!core::Report#getViolations() %}.
+- {% jdoc !!core::Report.ReadableDuration %}
### External Contributions
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
index fe7319e1d4..6f33d5ea31 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
@@ -74,7 +74,10 @@ public class Report implements Iterable {
/**
* Represents a duration. Useful for reporting processing time.
+ *
+ * @deprecated Not used within PMD. Rendering durations is format-specific.
*/
+ @Deprecated
public static class ReadableDuration {
private final long duration;
From acf58f1887aa678ea28be4928d51d1370120f2a9 Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Fri, 31 Jul 2020 20:26:27 +0200
Subject: [PATCH 16/23] Check for license headers in kotlin source files
---
pmd-java/pom.xml | 10 +++--
.../lang/java/ast/ASTCatchStatementTest.kt | 4 ++
.../lang/java/ast/ASTMethodDeclarationTest.kt | 4 ++
.../pmd/lang/java/ast/ASTPatternTest.kt | 4 ++
.../pmd/lang/java/ast/Java11Test.kt | 3 ++
.../pmd/lang/java/ast/KotlinTestingDsl.kt | 4 ++
.../pmd/lang/java/ast/ParserTestSpec.kt | 4 ++
.../pmd/lang/java/ast/TestExtensions.kt | 4 ++
.../pmd/lang/java/ast/WildcardBoundsTest.kt | 4 ++
.../pmd/lang/kotlin/cpd/testdata/comment.kt | 4 ++
.../pmd/lang/kotlin/cpd/testdata/comment.txt | 2 +-
.../pmd/lang/kotlin/cpd/testdata/imports.kt | 4 ++
.../pmd/lang/kotlin/cpd/testdata/increment.kt | 4 ++
.../lang/kotlin/cpd/testdata/increment.txt | 42 +++++++++----------
pmd-lang-test/pom.xml | 9 ++++
pmd-modelica/pom.xml | 9 ++++
pmd-scala-modules/pmd-scala-common/pom.xml | 4 ++
pom.xml | 3 +-
18 files changed, 96 insertions(+), 26 deletions(-)
diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml
index ed1d2a5f53..162facde15 100644
--- a/pmd-java/pom.xml
+++ b/pmd-java/pom.xml
@@ -14,18 +14,22 @@
- ${basedir}/src/test/resources
+ ${project.basedir}/src/test/resources
- ${basedir}/src/test/java
+ ${project.basedir}/src/test/java
**/testdata/*.java
+
+
+ ${project.basedir}/src/test/kotlin
+
- ${basedir}/src/main/resources
+ ${project.basedir}/src/main/resources
true
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTCatchStatementTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTCatchStatementTest.kt
index f6534b1415..73a2c2d9b7 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTCatchStatementTest.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTCatchStatementTest.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import io.kotest.matchers.collections.shouldContainExactly
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarationTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarationTest.kt
index cb37d0e866..b896147f99 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarationTest.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarationTest.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import net.sourceforge.pmd.lang.ast.test.shouldBe
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTPatternTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTPatternTest.kt
index 64dc9dd6c1..a5258154f2 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTPatternTest.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ASTPatternTest.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import net.sourceforge.pmd.lang.ast.test.shouldBe
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/Java11Test.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/Java11Test.kt
index 4f7e3fa53d..b3fa0815af 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/Java11Test.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/Java11Test.kt
@@ -1,3 +1,6 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
import io.kotest.matchers.shouldBe
import net.sourceforge.pmd.lang.java.ast.*
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/KotlinTestingDsl.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/KotlinTestingDsl.kt
index e3401c2c37..bff8c01fca 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/KotlinTestingDsl.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/KotlinTestingDsl.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import io.kotest.assertions.throwables.shouldThrow
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ParserTestSpec.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ParserTestSpec.kt
index c877e8e860..3e0d8aabe7 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ParserTestSpec.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/ParserTestSpec.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import io.kotest.core.config.Project
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TestExtensions.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TestExtensions.kt
index 76558ff0a4..3ba376f489 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TestExtensions.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/TestExtensions.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import net.sourceforge.pmd.lang.ast.test.shouldMatch
diff --git a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/WildcardBoundsTest.kt b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/WildcardBoundsTest.kt
index c5f174e2f7..2dc1a0b8e9 100644
--- a/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/WildcardBoundsTest.kt
+++ b/pmd-java/src/test/kotlin/net/sourceforge/pmd/lang/java/ast/WildcardBoundsTest.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package net.sourceforge.pmd.lang.java.ast
import io.kotest.matchers.shouldBe
diff --git a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.kt b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.kt
index 3f0e783d82..6e27f75fe7 100644
--- a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.kt
+++ b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package com.github.shyiko.ktlint.internal
var x = 0
diff --git a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.txt b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.txt
index d13247bcc2..0ab2c6c2b3 100644
--- a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.txt
+++ b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/comment.txt
@@ -1,5 +1,5 @@
[Image] or [Truncated image[ Bcol Ecol
-L3
+L7
[var] 1 3
[x] 5 5
[=] 7 7
diff --git a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/imports.kt b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/imports.kt
index 3f284aa546..b35619b85b 100644
--- a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/imports.kt
+++ b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/imports.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
import java.math.BigInteger
import java.math.BigInteger as BigInt
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
diff --git a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.kt b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.kt
index 58bd764e53..065a7ffe9a 100644
--- a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.kt
+++ b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.kt
@@ -1,3 +1,7 @@
+/*
+ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
+ */
+
package com.github.shyiko.ktlint.internal
var x = 0
diff --git a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.txt b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.txt
index 661e0ceb3a..365ee4cae8 100644
--- a/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.txt
+++ b/pmd-kotlin/src/test/resources/net/sourceforge/pmd/lang/kotlin/cpd/testdata/increment.txt
@@ -1,10 +1,10 @@
[Image] or [Truncated image[ Bcol Ecol
-L3
+L7
[var] 1 3
[x] 5 5
[=] 7 7
[0] 9 9
-L5
+L9
[fun] 1 3
[increment1] 5 14
[(] 15 15
@@ -14,7 +14,7 @@ L5
[+=] 22 23
[1] 25 25
[}] 27 27
-L6
+L10
[fun] 1 3
[increment2] 5 14
[(] 15 15
@@ -24,7 +24,7 @@ L6
[+=] 22 23
[1] 25 25
[}] 27 27
-L7
+L11
[fun] 1 3
[increment3] 5 14
[(] 15 15
@@ -34,7 +34,7 @@ L7
[+=] 22 23
[1] 25 25
[}] 27 27
-L8
+L12
[fun] 1 3
[increment4] 5 14
[(] 15 15
@@ -44,7 +44,7 @@ L8
[+=] 22 23
[1] 25 25
[}] 27 27
-L9
+L13
[fun] 1 3
[increment5] 5 14
[(] 15 15
@@ -54,7 +54,7 @@ L9
[+=] 22 23
[1] 25 25
[}] 27 27
-L10
+L14
[fun] 1 3
[increment6] 5 14
[(] 15 15
@@ -64,7 +64,7 @@ L10
[+=] 22 23
[1] 25 25
[}] 27 27
-L11
+L15
[fun] 1 3
[increment7] 5 14
[(] 15 15
@@ -74,7 +74,7 @@ L11
[+=] 22 23
[1] 25 25
[}] 27 27
-L12
+L16
[fun] 1 3
[increment8] 5 14
[(] 15 15
@@ -84,7 +84,7 @@ L12
[+=] 22 23
[1] 25 25
[}] 27 27
-L13
+L17
[fun] 1 3
[increment9] 5 14
[(] 15 15
@@ -94,7 +94,7 @@ L13
[+=] 22 23
[1] 25 25
[}] 27 27
-L14
+L18
[fun] 1 3
[increment10] 5 15
[(] 16 16
@@ -104,7 +104,7 @@ L14
[+=] 23 24
[1] 26 26
[}] 28 28
-L15
+L19
[fun] 1 3
[increment11] 5 15
[(] 16 16
@@ -114,7 +114,7 @@ L15
[+=] 23 24
[1] 26 26
[}] 28 28
-L16
+L20
[fun] 1 3
[increment12] 5 15
[(] 16 16
@@ -124,7 +124,7 @@ L16
[+=] 23 24
[1] 26 26
[}] 28 28
-L17
+L21
[fun] 1 3
[increment13] 5 15
[(] 16 16
@@ -134,7 +134,7 @@ L17
[+=] 23 24
[1] 26 26
[}] 28 28
-L18
+L22
[fun] 1 3
[increment14] 5 15
[(] 16 16
@@ -144,7 +144,7 @@ L18
[+=] 23 24
[1] 26 26
[}] 28 28
-L19
+L23
[fun] 1 3
[increment15] 5 15
[(] 16 16
@@ -154,7 +154,7 @@ L19
[+=] 23 24
[1] 26 26
[}] 28 28
-L20
+L24
[fun] 1 3
[increment16] 5 15
[(] 16 16
@@ -164,7 +164,7 @@ L20
[+=] 23 24
[1] 26 26
[}] 28 28
-L21
+L25
[fun] 1 3
[increment17] 5 15
[(] 16 16
@@ -174,7 +174,7 @@ L21
[+=] 23 24
[1] 26 26
[}] 28 28
-L22
+L26
[fun] 1 3
[increment18] 5 15
[(] 16 16
@@ -184,7 +184,7 @@ L22
[+=] 23 24
[1] 26 26
[}] 28 28
-L23
+L27
[fun] 1 3
[increment19] 5 15
[(] 16 16
@@ -194,7 +194,7 @@ L23
[+=] 23 24
[1] 26 26
[}] 28 28
-L24
+L28
[fun] 1 3
[increment20] 5 15
[(] 16 16
diff --git a/pmd-lang-test/pom.xml b/pmd-lang-test/pom.xml
index 2fcedf2c44..99510585c2 100644
--- a/pmd-lang-test/pom.xml
+++ b/pmd-lang-test/pom.xml
@@ -18,6 +18,15 @@
${project.basedir}/src/main/kotlin
+
+
+ ${project.basedir}/src/test/resources
+
+
+
+ ${project.basedir}/src/main/kotlin
+
+
diff --git a/pmd-modelica/pom.xml b/pmd-modelica/pom.xml
index 3f64be86b0..580b39fa84 100644
--- a/pmd-modelica/pom.xml
+++ b/pmd-modelica/pom.xml
@@ -12,6 +12,15 @@
+
+
+ ${project.basedir}/src/test/resources
+
+
+
+ ${project.basedir}/src/test/kotlin
+
+
maven-resources-plugin
diff --git a/pmd-scala-modules/pmd-scala-common/pom.xml b/pmd-scala-modules/pmd-scala-common/pom.xml
index 78238212f8..21b4f8de50 100644
--- a/pmd-scala-modules/pmd-scala-common/pom.xml
+++ b/pmd-scala-modules/pmd-scala-common/pom.xml
@@ -28,6 +28,10 @@
../pmd-scala-common/src/test/resources
+
+
+ ../pmd-scala-common/src/test/kotlin
+
diff --git a/pom.xml b/pom.xml
index 1846f3823b..da3b6a63a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -346,9 +346,10 @@
/net/sourceforge/pmd/pmd-checkstyle-suppressions.xml
true
+
${project.build.sourceDirectory}
- **/*.properties,**/*.less
+ **/*.properties,**/*.less,**/*.kt
From 1c6bd4e7150c29a9fbdeab35abeaaa34cca44c39 Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Fri, 31 Jul 2020 22:43:52 +0200
Subject: [PATCH 17/23] Move common config to parent pom
---
pmd-modelica/pom.xml | 9 ---------
pom.xml | 9 +++++++++
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/pmd-modelica/pom.xml b/pmd-modelica/pom.xml
index 580b39fa84..3f64be86b0 100644
--- a/pmd-modelica/pom.xml
+++ b/pmd-modelica/pom.xml
@@ -12,15 +12,6 @@
-
-
- ${project.basedir}/src/test/resources
-
-
-
- ${project.basedir}/src/test/kotlin
-
-
maven-resources-plugin
diff --git a/pom.xml b/pom.xml
index da3b6a63a3..5529a8b81f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,6 +111,15 @@
+
+
+ ${project.basedir}/src/test/resources
+
+
+
+ ${project.basedir}/src/test/kotlin
+
+
From eb219916dcf669add24912a82a0965a395956e04 Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Sun, 2 Aug 2020 16:50:04 +0200
Subject: [PATCH 18/23] [doc] Update release notes
---
docs/pages/release_notes.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index a9f58d3787..4d80a38837 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -28,6 +28,7 @@ This is a {{ site.pmd.release_type }} release.
- {% jdoc xml::lang.xml.rule.XmlXpathRule %}
- Properties of {% jdoc xml::lang.xml.rule.AbstractXmlRule %}
- {% jdoc javascript::lang.ecmascript.EcmascriptParserOptions %}
+- {% jdoc javascript::lang.ecmascript.rule.EcmascriptXPathRule %}
### External Contributions
From dafacf3d7812622c39c0a8416654e4acc9db269c Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Sun, 2 Aug 2020 17:02:12 +0200
Subject: [PATCH 19/23] [doc] Use rule tags
---
docs/pages/release_notes.md | 20 +++++++++----------
.../resources/category/java/errorprone.xml | 2 +-
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index bcb55750e0..ab36106f82 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -17,9 +17,9 @@ This is a {{ site.pmd.release_type }} release.
#### Deprecated Rules
-- The Java rule [`DataflowAnomalyAnalysis`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_errorprone.html#dataflowanomalyanalysis)
-is deprecated in favour of [`UnusedAssignment`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_bestpractices.html#unusedassignment),
-which was introduced in PMD 6.26.0.
+* The Java rule {% rule "java/errorprone/DataflowAnomalyAnalysis" %} (`java-errorprone`)
+ is deprecated in favour of {% rule "java/bestpractices/UnusedAssignment" %} (`java-bestpractices`),
+ which was introduced in PMD 6.26.0.
### Fixed Issues
@@ -27,14 +27,12 @@ which was introduced in PMD 6.26.0.
#### Deprecated API
-- The dataflow codebase is deprecated for removal in PMD 7. This
- includes all code in the following packages, and their subpackages:
- - {% jdoc_package plsql::lang.plsql.dfa %}
- - {% jdoc_package java::lang.java.dfa %}
- - {% jdoc_package core::lang.dfa %}
-
- and the class {% jdoc plsql::lang.plsql.PLSQLDataFlowHandler %}
-
+* The dataflow codebase is deprecated for removal in PMD 7. This
+ includes all code in the following packages, and their subpackages:
+ * {% jdoc_package plsql::lang.plsql.dfa %}
+ * {% jdoc_package java::lang.java.dfa %}
+ * {% jdoc_package core::lang.dfa %}
+ and the class {% jdoc plsql::lang.plsql.PLSQLDataFlowHandler %}
### External Contributions
diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml
index 97c881d6e4..2e2972a11f 100644
--- a/pmd-java/src/main/resources/category/java/errorprone.xml
+++ b/pmd-java/src/main/resources/category/java/errorprone.xml
@@ -1153,7 +1153,7 @@ From those informations there can be found various problems.
1. DU - Anomaly: A recently defined variable is undefined. These anomalies may appear in normal source text.
2. DD - Anomaly: A recently defined variable is redefined. This is ominous but don't have to be a bug.
-This rule is deprecated. Use UnusedAssignment in category bestpractices instead.
+This rule is deprecated. Use {% rule "java/bestpractices/UnusedAssignment" %} in category bestpractices instead.
5
From 19918c6c51011e60290f389b8256af70a7a228ae Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Sun, 2 Aug 2020 17:54:18 +0200
Subject: [PATCH 20/23] [doc] Update release notes, fixes #2647
---
docs/pages/release_notes.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index f493cc8036..ab9f715880 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -37,6 +37,7 @@ This is a {{ site.pmd.release_type }} release.
* java-errorprone
* [#2431](https://github.com/pmd/pmd/issues/2431): \[java] InvalidLogMessageFormatRule throws IndexOutOfBoundsException when only logging exception message
* [#2439](https://github.com/pmd/pmd/issues/2439): \[java] AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t)
+ * [#2647](https://github.com/pmd/pmd/issues/2647): \[java] Deprecate rule DataFlowAnomalyAnalysis
* java-performance
* [#2441](https://github.com/pmd/pmd/issues/2441): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';`
From 66efc90cb3eb103caa8fdceef8ffbf127c49505c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?=
Date: Mon, 3 Aug 2020 13:19:43 +0200
Subject: [PATCH 21/23] PR comments
---
.../main/java/net/sourceforge/pmd/Report.java | 35 +++++++++++++------
1 file changed, 25 insertions(+), 10 deletions(-)
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
index 6f33d5ea31..3d6cd2d45d 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/Report.java
@@ -1,4 +1,4 @@
-/**
+/*
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
@@ -315,6 +315,16 @@ public class Report implements Iterable {
listeners.add(listener);
}
+ /**
+ * Returns the suppressed violations.
+ *
+ * @deprecated Use {@link #getSuppressedViolations()} (be aware, that that method returns an unmodifiable list)
+ */
+ @Deprecated
+ public List getSuppressedRuleViolations() {
+ return suppressedRuleViolations;
+ }
+
/**
* Adds a new rule violation to the report and notify the listeners.
*
@@ -427,6 +437,9 @@ public class Report implements Iterable {
}
/**
+ * Checks whether there are no violations and no processing errors.
+ * That means, that PMD analysis yielded nothing to worry about.
+ *
* @deprecated Use {@link #getViolations()} or {@link #getProcessingErrors()}
*/
@Deprecated
@@ -453,11 +466,11 @@ public class Report implements Iterable {
* @return true
if there were any configuration errors,
* false
otherwise
*
- * @deprecated Use {@link #getConfigErrors()}.isEmpty()
+ * @deprecated Use {@link #getConfigurationErrors()}.isEmpty()
*/
@Deprecated
public boolean hasConfigErrors() {
- return !getConfigErrors().isEmpty();
+ return !getConfigurationErrors().isEmpty();
}
/**
@@ -466,7 +479,7 @@ public class Report implements Iterable {
* @return true
if no violations have been reported,
* false
otherwise
*
- * @deprecated The {@link ReportTree} is deprecated
+ * @deprecated The {@link ReportTree} is deprecated, use {@link #getViolations()}.isEmpty() instead.
*/
@Deprecated
public boolean treeIsEmpty() {
@@ -498,15 +511,17 @@ public class Report implements Iterable {
/**
* Returns an unmodifiable list of violations that were suppressed.
*/
- public List getSuppressedRuleViolations() {
+ public final List getSuppressedViolations() {
return Collections.unmodifiableList(suppressedRuleViolations);
}
/**
* Returns an unmodifiable list of violations that have been
* recorded until now. None of those violations were suppressed.
+ *
+ * The violations list is sorted with {@link RuleViolationComparator#INSTANCE}.
*/
- public List getViolations() {
+ public final List getViolations() {
return Collections.unmodifiableList(violations);
}
@@ -515,7 +530,7 @@ public class Report implements Iterable {
* Returns an unmodifiable list of processing errors that have been
* recorded until now.
*/
- public List getProcessingErrors() {
+ public final List getProcessingErrors() {
return Collections.unmodifiableList(errors);
}
@@ -524,7 +539,7 @@ public class Report implements Iterable {
* Returns an unmodifiable list of configuration errors that have
* been recorded until now.
*/
- public List getConfigErrors() {
+ public final List getConfigurationErrors() {
return Collections.unmodifiableList(configErrors);
}
@@ -545,11 +560,11 @@ public class Report implements Iterable {
* Returns an iterator of the reported configuration errors.
*
* @return the iterator
- * @deprecated Use {@link #getConfigErrors()}
+ * @deprecated Use {@link #getConfigurationErrors()}
*/
@Deprecated
public Iterator configErrors() {
- return getConfigErrors().iterator();
+ return getConfigurationErrors().iterator();
}
/**
From 0f4b11873cabb3cb3cc63f44f9d36b15794a7084 Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Mon, 3 Aug 2020 20:46:29 +0200
Subject: [PATCH 22/23] [doc] Update release notes, fixes #1962
---
docs/pages/release_notes.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index 668bfe7d3a..a4bb445936 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -30,6 +30,7 @@ This is a {{ site.pmd.release_type }} release.
* core
* [#724](https://github.com/pmd/pmd/issues/724): \[core] Avoid parsing rulesets multiple times
+ * [#1962](https://github.com/pmd/pmd/issues/1962): \[core] Simplify Report API
* [#2653](https://github.com/pmd/pmd/issues/2653): \[lang-test] Upgrade kotlintest to Kotest
* java-bestpractices
* [#2471](https://github.com/pmd/pmd/issues/2471): \[java] New Rule: AvoidReassigningCatchVariables
From 7833d6c35fe56759486f2efc09fccf8f48f6d29a Mon Sep 17 00:00:00 2001
From: Andreas Dangel
Date: Mon, 3 Aug 2020 20:47:20 +0200
Subject: [PATCH 23/23] [doc] Fix release notes jdoc typo for XmlXPathRule
---
docs/pages/release_notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index a4bb445936..41983da11b 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -63,7 +63,7 @@ This is a {{ site.pmd.release_type }} release.
* {% jdoc javascript::lang.ecmascript.EcmascriptParserOptions %}
* {% jdoc javascript::lang.ecmascript.rule.EcmascriptXPathRule %}
* {% jdoc xml::lang.xml.XmlParserOptions %}
-* {% jdoc xml::lang.xml.rule.XmlXpathRule %}
+* {% jdoc xml::lang.xml.rule.XmlXPathRule %}
* Properties of {% jdoc xml::lang.xml.rule.AbstractXmlRule %}
* {% jdoc !!core::Report.ReadableDuration %}