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("" + 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("
Rule nameNumber of violations
"); 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 %}