From f7d67df4426db0a29170e3e14f2c1e84aa6008d2 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Fri, 29 Sep 2017 10:49:58 +0200 Subject: [PATCH] Remove ruleset schema 3.0.0 --- docs/pages/pmd/devdocs/writing_xpath_rules.md | 4 +- .../pmd/userdocs/understanding_rulesets.md | 4 +- .../main/resources/rulesets/apex/metrics.xml | 5 +- .../resources/rulesets/apex/metrics_test.xml | 10 +- .../net/sourceforge/pmd/RuleSetWriter.java | 22 ++--- pmd-core/src/main/resources/ruleset_3_0_0.dtd | 33 ------- pmd-core/src/main/resources/ruleset_3_0_0.xsd | 91 ------------------- .../sourceforge/pmd/RuleSetSchemaTest.java | 55 +---------- .../main/resources/rulesets/java/codesize.xml | 5 +- .../main/resources/rulesets/java/design.xml | 5 +- .../main/resources/rulesets/java/metrics.xml | 7 +- .../resources/rulesets/java/metrics_test.xml | 34 +++---- .../pmd/AbstractRuleSetFactoryTest.java | 9 -- 13 files changed, 42 insertions(+), 242 deletions(-) delete mode 100644 pmd-core/src/main/resources/ruleset_3_0_0.dtd delete mode 100644 pmd-core/src/main/resources/ruleset_3_0_0.xsd diff --git a/docs/pages/pmd/devdocs/writing_xpath_rules.md b/docs/pages/pmd/devdocs/writing_xpath_rules.md index ccbc1982c1..5fe1a178e0 100644 --- a/docs/pages/pmd/devdocs/writing_xpath_rules.md +++ b/docs/pages/pmd/devdocs/writing_xpath_rules.md @@ -160,9 +160,9 @@ the example code and give your rule a useful name and message. + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> Custom rules diff --git a/docs/pages/pmd/userdocs/understanding_rulesets.md b/docs/pages/pmd/userdocs/understanding_rulesets.md index cf9ea363c6..23c9e39851 100644 --- a/docs/pages/pmd/userdocs/understanding_rulesets.md +++ b/docs/pages/pmd/userdocs/understanding_rulesets.md @@ -31,9 +31,9 @@ You start by creating a new XML file with the following contents: + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> Custom rules diff --git a/pmd-apex/src/main/resources/rulesets/apex/metrics.xml b/pmd-apex/src/main/resources/rulesets/apex/metrics.xml index 9945274733..af65a7f7f3 100644 --- a/pmd-apex/src/main/resources/rulesets/apex/metrics.xml +++ b/pmd-apex/src/main/resources/rulesets/apex/metrics.xml @@ -1,9 +1,9 @@ + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> These are rules which use the Metrics Framework to calculate metrics. @@ -13,7 +13,6 @@ message="The {0} ''{1}'' has a{2} cyclomatic complexity of {3}." since="6.0.0" class="net.sourceforge.pmd.lang.apex.metrics.rule.CyclomaticComplexityRule" - metrics="true" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_apex_metrics.html#cyclomaticcomplexity"> + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> Metrics testing ruleset. Each metric is tested through a dummy rule. @@ -11,14 +11,12 @@ + class="net.sourceforge.pmd.lang.apex.metrics.impl.CycloTestRule"> + class="net.sourceforge.pmd.lang.apex.metrics.impl.WmcTestRule"> diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetWriter.java b/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetWriter.java index 80ea5d6f79..3bbc005b63 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetWriter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/RuleSetWriter.java @@ -9,6 +9,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; @@ -41,7 +42,6 @@ import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorUtil; public class RuleSetWriter { public static final String RULESET_2_0_0_NS_URI = "http://pmd.sourceforge.net/ruleset/2.0.0"; - public static final String RULESET_3_0_0_NS_URI = "http://pmd.sourceforge.net/ruleset/3.0.0"; /** * @deprecated use {@link #RULESET_2_0_0_NS_URI} instead @@ -97,10 +97,10 @@ public class RuleSetWriter { } private Element createRuleSetElement(RuleSet ruleSet) { - Element ruleSetElement = document.createElementNS(RULESET_3_0_0_NS_URI, "ruleset"); + Element ruleSetElement = document.createElementNS(RULESET_2_0_0_NS_URI, "ruleset"); ruleSetElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); ruleSetElement.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", - RULESET_3_0_0_NS_URI + " http://pmd.sourceforge.net/ruleset_3_0_0.xsd"); + RULESET_2_0_0_NS_URI + " http://pmd.sourceforge.net/ruleset_2_0_0.xsd"); ruleSetElement.setAttribute("name", ruleSet.getName()); Element descriptionElement = createDescriptionElement(ruleSet.getDescription()); @@ -137,11 +137,11 @@ public class RuleSetWriter { } private Element createRuleElement() { - return document.createElementNS(RULESET_3_0_0_NS_URI, "rule"); + return document.createElementNS(RULESET_2_0_0_NS_URI, "rule"); } private Element createExcludeElement(String exclude) { - Element element = document.createElementNS(RULESET_3_0_0_NS_URI, "exclude"); + Element element = document.createElementNS(RULESET_2_0_0_NS_URI, "exclude"); element.setAttribute("name", exclude); return element; } @@ -155,7 +155,7 @@ public class RuleSetWriter { } private Element createPropertiesElement() { - return document.createElementNS(RULESET_3_0_0_NS_URI, "properties"); + return document.createElementNS(RULESET_2_0_0_NS_URI, "properties"); } private Element createRuleElement(Rule rule) { @@ -211,7 +211,7 @@ public class RuleSetWriter { private Element createSingleRuleElement(Language language, LanguageVersion minimumLanguageVersion, LanguageVersion maximumLanguageVersion, Boolean deprecated, String name, String since, String ref, String message, String externalInfoUrl, String clazz, Boolean dfa, Boolean typeResolution, - Boolean metrics, + Boolean multifile, String description, RulePriority priority, List> propertyDescriptors, Map, Object> propertiesByPropertyDescriptor, List examples) { Element ruleElement = createRuleElement(); @@ -234,7 +234,7 @@ public class RuleSetWriter { setIfNonNull(externalInfoUrl, ruleElement, "externalInfoUrl"); setIfNonNull(dfa, ruleElement, "dfa"); setIfNonNull(typeResolution, ruleElement, "typeResolution"); - setIfNonNull(metrics, ruleElement, "metrics"); + //TODO multifile: setIfNonNull(multifile, ruleElement, "multifile"); if (description != null) { Element descriptionElement = createDescriptionElement(description); @@ -328,7 +328,7 @@ public class RuleSetWriter { } private Element createPropertyValueElement(PropertyDescriptor propertyDescriptor, Object value) { - Element propertyElement = document.createElementNS(RULESET_3_0_0_NS_URI, "property"); + Element propertyElement = document.createElementNS(RULESET_2_0_0_NS_URI, "property"); propertyElement.setAttribute("name", propertyDescriptor.name()); String valueString = propertyDescriptor.asDelimitedString(value); if (XPathRule.XPATH_DESCRIPTOR.equals(propertyDescriptor)) { @@ -359,14 +359,14 @@ public class RuleSetWriter { } private Element createTextElement(String name, String value) { - Element element = document.createElementNS(RULESET_3_0_0_NS_URI, name); + Element element = document.createElementNS(RULESET_2_0_0_NS_URI, name); Text text = document.createTextNode(value); element.appendChild(text); return element; } private Element createCDATASectionElement(String name, String value) { - Element element = document.createElementNS(RULESET_3_0_0_NS_URI, name); + Element element = document.createElementNS(RULESET_2_0_0_NS_URI, name); CDATASection cdataSection = document.createCDATASection(value); element.appendChild(cdataSection); return element; diff --git a/pmd-core/src/main/resources/ruleset_3_0_0.dtd b/pmd-core/src/main/resources/ruleset_3_0_0.dtd deleted file mode 100644 index d13028e111..0000000000 --- a/pmd-core/src/main/resources/ruleset_3_0_0.dtd +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pmd-core/src/main/resources/ruleset_3_0_0.xsd b/pmd-core/src/main/resources/ruleset_3_0_0.xsd deleted file mode 100644 index f45924922b..0000000000 --- a/pmd-core/src/main/resources/ruleset_3_0_0.xsd +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetSchemaTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetSchemaTest.java index 5e63450470..c219d50978 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetSchemaTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/RuleSetSchemaTest.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -48,7 +47,7 @@ public class RuleSetSchemaTest { @Test public void verifyVersion2() throws Exception { - String ruleset = generateRuleSet("2.0.0", false); + String ruleset = generateRuleSet("2.0.0"); Document doc = parseWithVersion2(ruleset); assertNotNull(doc); @@ -57,41 +56,11 @@ public class RuleSetSchemaTest { assertEquals("Custom ruleset", ((Attr) doc.getElementsByTagName("ruleset").item(0).getAttributes().getNamedItem("name")).getValue()); } - @Test - public void verifyVersion3() throws Exception { - String ruleset = generateRuleSet("3.0.0", true); - Document doc = parseWithVersion3(ruleset); - assertNotNull(doc); - - assertTrue(errorHandler.isValid()); - - assertEquals("Custom ruleset", ((Attr) doc.getElementsByTagName("ruleset").item(0).getAttributes().getNamedItem("name")).getValue()); - assertEquals("true", ((Attr) doc.getElementsByTagName("rule").item(0).getAttributes().getNamedItem("metrics")).getValue()); - } - @Test public void validateOnly() throws Exception { Validator validator = PMDRuleSetEntityResolver.getSchemaVersion2().newValidator(); validator.setErrorHandler(errorHandler); - validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("2.0.0", false).getBytes(StandardCharsets.UTF_8)))); - assertTrue(errorHandler.isValid()); - errorHandler.reset(); - - validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("2.0.0", true).getBytes(StandardCharsets.UTF_8)))); - assertFalse(errorHandler.isValid()); // metrics attribute is not allowed - errorHandler.reset(); - - validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("3.0.0", false).getBytes(StandardCharsets.UTF_8)))); - assertFalse(errorHandler.isValid()); // schema namespace doesn't match, so element ruleset is not known - errorHandler.reset(); - - validator = PMDRuleSetEntityResolver.getSchemaVersion3().newValidator(); - validator.setErrorHandler(errorHandler); - validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("3.0.0", false).getBytes(StandardCharsets.UTF_8)))); - assertTrue(errorHandler.isValid()); - errorHandler.reset(); - - validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("3.0.0", true).getBytes(StandardCharsets.UTF_8)))); + validator.validate(new StreamSource(new ByteArrayInputStream(generateRuleSet("2.0.0").getBytes(StandardCharsets.UTF_8)))); assertTrue(errorHandler.isValid()); errorHandler.reset(); } @@ -108,17 +77,7 @@ public class RuleSetSchemaTest { return doc; } - private Document parseWithVersion3(String ruleset) throws SAXException, ParserConfigurationException, IOException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - dbf.setFeature("http://apache.org/xml/features/validation/schema", true); - DocumentBuilder builder = dbf.newDocumentBuilder(); - builder.setErrorHandler(errorHandler); - Document doc = builder.parse(new ByteArrayInputStream(ruleset.getBytes(StandardCharsets.UTF_8))); - return doc; - } - - private String generateRuleSet(String version, boolean withMetrics) { + private String generateRuleSet(String version) { String versionUnderscore = version.replaceAll("\\.", "_"); String ruleset = "" + PMD.EOL + "" + PMD.EOL + " " + PMD.EOL + " Just for test" + PMD.EOL @@ -150,15 +108,12 @@ public class RuleSetSchemaTest { public static class PMDRuleSetEntityResolver implements EntityResolver { private static URL schema2 = RuleSetFactory.class.getResource("/ruleset_2_0_0.xsd"); - private static URL schema3 = RuleSetFactory.class.getResource("/ruleset_3_0_0.xsd"); private static SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); @Override public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { if ("http://pmd.sourceforge.net/ruleset_2_0_0.xsd".equals(systemId)) { return new InputSource(schema2.toExternalForm()); - } else if ("http://pmd.sourceforge.net/ruleset_3_0_0.xsd".equals(systemId)) { - return new InputSource(schema3.toExternalForm()); } throw new IllegalArgumentException("Unable to resolve entity (publicId=" + publicId + ", systemId=" + systemId + ")"); } @@ -166,10 +121,6 @@ public class RuleSetSchemaTest { public static Schema getSchemaVersion2() throws SAXException { return schemaFactory.newSchema(schema2); } - - public static Schema getSchemaVersion3() throws SAXException { - return schemaFactory.newSchema(schema3); - } } public static class CollectingErrorHandler implements ErrorHandler { diff --git a/pmd-java/src/main/resources/rulesets/java/codesize.xml b/pmd-java/src/main/resources/rulesets/java/codesize.xml index 2d4be9bebd..8c3b99c463 100644 --- a/pmd-java/src/main/resources/rulesets/java/codesize.xml +++ b/pmd-java/src/main/resources/rulesets/java/codesize.xml @@ -1,9 +1,9 @@ + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> The Code Size ruleset contains rules that find problems related to code size or complexity. @@ -455,7 +455,6 @@ public class Foo extends Bar { message="The {0} ''{1}'' has a NCSS line count of {2}." since="6.0" class="net.sourceforge.pmd.lang.java.rule.codesize.NcssCountRule" - metrics="true" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_codesize.html#ncsscount"> This rule uses the NCSS (Non-Commenting Source Statements) metric to determine the number of lines diff --git a/pmd-java/src/main/resources/rulesets/java/design.xml b/pmd-java/src/main/resources/rulesets/java/design.xml index 31839ccf57..b0de9c5901 100644 --- a/pmd-java/src/main/resources/rulesets/java/design.xml +++ b/pmd-java/src/main/resources/rulesets/java/design.xml @@ -1,9 +1,9 @@ + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> The Design ruleset contains rules that flag suboptimal code implementations. Alternate approaches @@ -1844,7 +1844,6 @@ public class HelloWorldBean { language="java" since="5.0" message="Possible God Class (WMC={0}, ATFD={2}, TCC={1})" - metrics="true" class="net.sourceforge.pmd.lang.java.rule.design.GodClassRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_design.html#godclass"> diff --git a/pmd-java/src/main/resources/rulesets/java/metrics.xml b/pmd-java/src/main/resources/rulesets/java/metrics.xml index 3b4fd0fcec..738d78d9ac 100644 --- a/pmd-java/src/main/resources/rulesets/java/metrics.xml +++ b/pmd-java/src/main/resources/rulesets/java/metrics.xml @@ -1,9 +1,9 @@ + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> These are rules which use the Metrics Framework to calculate metrics. @@ -13,7 +13,6 @@ message="The {0} ''{1}'' has a{2} cyclomatic complexity of {3}." since="1.03" class="net.sourceforge.pmd.lang.java.metrics.rule.CyclomaticComplexityRule" - metrics="true" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_metrics.html#cyclomaticcomplexity"> The NPath complexity of a method is the number of acyclic execution paths through that method. @@ -124,7 +122,6 @@ public class Foo { since="6.0" message="The class ''{0}'' is suspected to be a Data Class (WOC={1}, NOPA={2}, NOAM={3}, WMC={4})" class="net.sourceforge.pmd.lang.java.metrics.rule.DataClassRule" - metrics="true" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_metrics.html#DataClass"> Data Classes are simple data holders, which reveal most of their state, and diff --git a/pmd-java/src/test/resources/rulesets/java/metrics_test.xml b/pmd-java/src/test/resources/rulesets/java/metrics_test.xml index be4470c5a5..c08cf24b96 100644 --- a/pmd-java/src/test/resources/rulesets/java/metrics_test.xml +++ b/pmd-java/src/test/resources/rulesets/java/metrics_test.xml @@ -1,9 +1,9 @@ + xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> Metrics testing ruleset. Each metric is tested through a dummy rule. @@ -11,62 +11,52 @@ + class="net.sourceforge.pmd.lang.java.metrics.impl.CycloTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.NcssTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.WmcTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.LocTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.NPathTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.NopaTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.NoamTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.WocTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.TccTestRule"> + class="net.sourceforge.pmd.lang.java.metrics.impl.AtfdTestRule"> diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java index 1165fbb882..217358c757 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/AbstractRuleSetFactoryTest.java @@ -300,9 +300,6 @@ public abstract class AbstractRuleSetFactoryTest { inputStream.close(); String rulesetNamespace = RuleSetWriter.RULESET_2_0_0_NS_URI; - if (file.contains(RuleSetWriter.RULESET_3_0_0_NS_URI)) { - rulesetNamespace = RuleSetWriter.RULESET_3_0_0_NS_URI; - } // Remove XML Schema stuff, replace with DTD file = file.replaceAll("<\\?xml [ a-zA-Z0-9=\".-]*\\?>", ""); @@ -314,9 +311,6 @@ public abstract class AbstractRuleSetFactoryTest { if (rulesetNamespace.equals(RuleSetWriter.RULESET_2_0_0_NS_URI)) { file = "" + PMD.EOL + "" + PMD.EOL + file; - } else if (rulesetNamespace.equals(RuleSetWriter.RULESET_3_0_0_NS_URI)) { - file = "" + PMD.EOL + "" + PMD.EOL + file; } else { file = "" + PMD.EOL + "" + PMD.EOL + file; } @@ -503,10 +497,7 @@ public abstract class AbstractRuleSetFactoryTest { ValidateDefaultHandler() { schemaMapping = new HashMap<>(); schemaMapping.put("http://pmd.sourceforge.net/ruleset_2_0_0.xsd", "ruleset_2_0_0.xsd"); - schemaMapping.put("http://pmd.sourceforge.net/ruleset_3_0_0.xsd", "ruleset_3_0_0.xsd"); - schemaMapping.put("http://pmd.sourceforge.net/ruleset_2_0_0.dtd", "ruleset_2_0_0.dtd"); - schemaMapping.put("http://pmd.sourceforge.net/ruleset_3_0_0.dtd", "ruleset_3_0_0.dtd"); } public ValidateDefaultHandler resetValid() {