From 007de29e886d8f6640db60b8e35101d3ecdd79d1 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Mon, 4 Nov 2019 20:11:51 +0100 Subject: [PATCH] [core] RuleSetFactory - recognize rule reference for same ruleset There are two variants, how a renamed rule can be expressed in the ruleset via a deprecated rule reference: referencing just the new rule name or referencing the ruleset+new rule name. The latter case was not covered yet, it was not detected, that the rule ref references are rule in the same ruleset. Fixes #2096 --- docs/pages/release_notes.md | 3 +++ .../src/main/java/net/sourceforge/pmd/RuleSetFactory.java | 4 ++++ pmd-core/src/test/resources/rulesets/dummy/basic.xml | 4 ++++ pmd-dist/src/test/java/net/sourceforge/pmd/it/AllRulesIT.java | 1 + 4 files changed, 12 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 8c9dfcb29c7..5ee56770d32 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* core + * [#2096](https://github.com/pmd/pmd/issues/2096): \[core] Referencing category errorprone.xml produces deprecation warnings for InvalidSlf4jMessageFormat + ### API Changes ### External Contributions diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetFactory.java b/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetFactory.java index 4063640877d..47e535d6ffe 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetFactory.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetFactory.java @@ -639,6 +639,10 @@ private void parseRuleReferenceNode(RuleSetReferenceId ruleSetReferenceId, RuleS && containsRule(ruleSetReferenceId, otherRuleSetReferenceId.getRuleName())) { otherRuleSetReferenceId = new RuleSetReferenceId(ref, ruleSetReferenceId); isSameRuleSet = true; + } else if (otherRuleSetReferenceId.isExternal() + && otherRuleSetReferenceId.getRuleSetFileName().equals(ruleSetReferenceId.getRuleSetFileName())) { + otherRuleSetReferenceId = new RuleSetReferenceId(otherRuleSetReferenceId.getRuleName(), ruleSetReferenceId); + isSameRuleSet = true; } // do not ignore deprecated rule references Rule referencedRule = ruleSetFactory.createRule(otherRuleSetReferenceId, true); diff --git a/pmd-core/src/test/resources/rulesets/dummy/basic.xml b/pmd-core/src/test/resources/rulesets/dummy/basic.xml index f0a9dba6bd4..3644f408d10 100644 --- a/pmd-core/src/test/resources/rulesets/dummy/basic.xml +++ b/pmd-core/src/test/resources/rulesets/dummy/basic.xml @@ -18,7 +18,11 @@ Just for test + + + diff --git a/pmd-dist/src/test/java/net/sourceforge/pmd/it/AllRulesIT.java b/pmd-dist/src/test/java/net/sourceforge/pmd/it/AllRulesIT.java index 48191065020..e8ff3b25dea 100644 --- a/pmd-dist/src/test/java/net/sourceforge/pmd/it/AllRulesIT.java +++ b/pmd-dist/src/test/java/net/sourceforge/pmd/it/AllRulesIT.java @@ -40,6 +40,7 @@ private static void assertDefaultExecutionResult(ExecutionResult result) { result.assertNoError("Exception applying rule"); result.assertNoError("Ruleset not found"); result.assertNoError("Use of deprecated attribute"); + result.assertNoError("instead of the deprecated"); // rule deprecations result.assertNoErrorInReport("Error while processing"); result.assertNoErrorInReport("Error while parsing"); }