Skip to content

Commit

Permalink
Merge branch 'pr-1795'
Browse files Browse the repository at this point in the history
  • Loading branch information
jsotuyod committed Apr 28, 2019
2 parents de699fb + 67ac7f5 commit a953909
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 8 deletions.
3 changes: 2 additions & 1 deletion docs/pages/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designe
### Fixed Issues

* all
* [#1788](https://github.com/pmd/pmd/issues/1788): \[cpd] \[core] Use better `ClassLoader` for `ServiceLoader` in `LanguageFactory`
* [#1515](https://github.com/pmd/pmd/issues/1515): \[core] Module pmd-lang-test is missing javadoc artifact
* [#1788](https://github.com/pmd/pmd/issues/1788): \[cpd] \[core] Use better `ClassLoader` for `ServiceLoader` in `LanguageFactory`
* [#1794](https://github.com/pmd/pmd/issues/1794): \[core] Ruleset Compatibility fails with excluding rules
* go
* [#1751](https://github.com/pmd/pmd/issues/1751): \[go] Parsing errors encountered with escaped backslash
* java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,7 @@ public RuleSetFactoryCompatibility() {
// PMD 5.6.0
addFilterRuleRenamed("java", "design", "AvoidConstantsInterface", "ConstantsInInterface");
// unused/UnusedModifier moved AND renamed, order is important!
addFilterRuleMoved("java", "unusedcode", "unnecessary", "UnusedModifier");
addFilterRuleRenamed("java", "unnecessary", "UnusedModifier", "UnnecessaryModifier");
addFilterRuleMovedAndRenamed("java", "unusedcode", "UnusedModifier", "unnecessary", "UnnecessaryModifier");

// PMD 6.0.0
addFilterRuleMoved("java", "controversial", "unnecessary", "UnnecessaryParentheses");
Expand All @@ -79,11 +78,15 @@ public RuleSetFactoryCompatibility() {
addFilterRuleRenamed("java", "unnecessary", "UnnecessaryFinalModifier", "UnnecessaryModifier");
addFilterRuleRenamed("java", "empty", "EmptyStaticInitializer", "EmptyInitializer");
// GuardLogStatementJavaUtil moved and renamed...
addFilterRuleMoved("java", "logging-java", "logging-jakarta-commons", "GuardLogStatementJavaUtil");
addFilterRuleRenamed("java", "logging-jakarta-commons", "GuardLogStatementJavaUtil", "GuardLogStatement");
addFilterRuleMovedAndRenamed("java", "logging-java", "GuardLogStatementJavaUtil", "logging-jakarta-commons", "GuardLogStatement");
addFilterRuleRenamed("java", "logging-jakarta-commons", "GuardDebugLogging", "GuardLogStatement");
}

void addFilterRuleMovedAndRenamed(String language, String oldRuleset, String oldName, String newRuleset, String newName) {
filters.add(RuleSetFilter.ruleMoved(language, oldRuleset, newRuleset, oldName));
filters.add(RuleSetFilter.ruleRenamedMoved(language, newRuleset, oldName, newName));
}

void addFilterRuleRenamed(String language, String ruleset, String oldName, String newName) {
filters.add(RuleSetFilter.ruleRenamed(language, ruleset, oldName, newName));
}
Expand Down Expand Up @@ -172,13 +175,17 @@ private void setExclusionPattern(String oldName, String newName) {
}

public static RuleSetFilter ruleRenamed(String language, String ruleset, String oldName, String newName) {
String base = "rulesets/" + language + "/" + ruleset + ".xml/";
RuleSetFilter filter = new RuleSetFilter(base + oldName, base + newName, "The rule \"" + oldName
+ "\" has been renamed to \"" + newName + "\". Please change your ruleset!");
RuleSetFilter filter = ruleRenamedMoved(language, ruleset, oldName, newName);
filter.setExclusionPattern(oldName, newName);
return filter;
}

public static RuleSetFilter ruleRenamedMoved(String language, String ruleset, String oldName, String newName) {
String base = "rulesets/" + language + "/" + ruleset + ".xml/";
return new RuleSetFilter(base + oldName, base + newName, "The rule \"" + oldName
+ "\" has been renamed to \"" + newName + "\". Please change your ruleset!");
}

public static RuleSetFilter ruleMoved(String language, String oldRuleset, String newRuleset, String ruleName) {
String base = "rulesets/" + language + "/";
return new RuleSetFilter(base + oldRuleset + ".xml/" + ruleName, base + newRuleset + ".xml/" + ruleName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,28 @@ public void testExclusion() throws Exception {
Assert.assertNull(createdRuleSet.getRuleByName("SampleXPathRule"));
}

@Test
public void testExclusionRenamedAndMoved() throws Exception {
final String ruleset = "<?xml version=\"1.0\"?>\n" + "\n" + "<ruleset name=\"Test\"\n"
+ " xmlns=\"http://pmd.sourceforge.net/ruleset/2.0.0\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd\">\n"
+ " <description>Test</description>\n" + "\n"
+ " <rule ref=\"rulesets/dummy/oldbasic.xml\">\n"
+ " <exclude name=\"OldDummyBasicMockRule\"/>\n"
+ " </rule>\n"
+ "</ruleset>\n";

RuleSetFactoryCompatibility rsfc = new RuleSetFactoryCompatibility();
rsfc.addFilterRuleMovedAndRenamed("dummy", "oldbasic", "OldDummyBasicMockRule", "basic", "NewNameForDummyBasicMockRule");

InputStream stream = new ByteArrayInputStream(ruleset.getBytes(ISO_8859_1));
Reader filtered = rsfc.filterRuleSetFile(stream);
String out = IOUtils.toString(filtered);

Assert.assertTrue(out.contains("OldDummyBasicMockRule"));
}

@Test
public void testFilter() throws Exception {
RuleSetFactoryCompatibility rsfc = new RuleSetFactoryCompatibility();
Expand Down
10 changes: 10 additions & 0 deletions pmd-core/src/test/resources/rulesets/dummy/oldbasic.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<ruleset name="Test Ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

<description>
Ruleset used by test RuleSetFactoryCompatibilityTest
</description>

<rule deprecated="true" name="OldNameOfDummyBasicMockRule" ref="rulesets/dummy/oldbasic.xml/DummyBasicMockRule"/>
</ruleset>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/

package net.sourceforge.pmd.lang.java;

import org.junit.Assert;
import org.junit.Test;

import net.sourceforge.pmd.RulePriority;
import net.sourceforge.pmd.RuleSet;
import net.sourceforge.pmd.RuleSetFactory;
import net.sourceforge.pmd.util.ResourceLoader;

public class PMD5RulesetTest {

@Test
public void loadRuleset() throws Exception {
RuleSetFactory ruleSetFactory = new RuleSetFactory(new ResourceLoader(), RulePriority.LOW, true, true);
RuleSet ruleset = ruleSetFactory.createRuleSet("net/sourceforge/pmd/lang/java/pmd5ruleset.xml");
Assert.assertNotNull(ruleset);
Assert.assertNull(ruleset.getRuleByName("GuardLogStatementJavaUtil"));
Assert.assertNull(ruleset.getRuleByName("GuardLogStatement"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0"?>

<ruleset name="custom-ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">
<description>
custom ruleset
</description>

<rule ref="rulesets/java/logging-java.xml">
<exclude name="GuardLogStatementJavaUtil"/>
</rule>

</ruleset>

0 comments on commit a953909

Please sign in to comment.