]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-14885 Remove deprecated XMLRuleParser
authorJulien HENRY <julien.henry@sonarsource.com>
Fri, 28 May 2021 09:34:53 +0000 (11:34 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 28 May 2021 20:21:38 +0000 (20:21 +0000)
server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/XMLRuleParser.java [deleted file]

index c289d2dcd3f57b915ab3282301d9d8aa7fd169bd..4a5c936954d12fdc6ad256080e7efeaac5ffd5f0 100644 (file)
@@ -35,7 +35,6 @@ import org.sonar.api.profiles.XMLProfileSerializer;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.resources.ResourceTypes;
 import org.sonar.api.rules.AnnotationRuleParser;
-import org.sonar.api.rules.XMLRuleParser;
 import org.sonar.api.server.profile.BuiltInQualityProfileAnnotationLoader;
 import org.sonar.api.server.rule.RulesDefinitionXmlLoader;
 import org.sonar.api.utils.Durations;
@@ -369,7 +368,6 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer {
 
       // rule
       AnnotationRuleParser.class,
-      XMLRuleParser.class,
       DefaultRuleFinder.class,
       RulesDefinitionXmlLoader.class,
       AdHocRuleCreator.class,
index 576d314d475c06e4325a955f3e5fbe7d061492de..75b374c1fc05958420f9c870ea2daa304c05f180 100644 (file)
@@ -34,7 +34,6 @@ import org.sonar.api.profiles.XMLProfileSerializer;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.resources.ResourceTypes;
 import org.sonar.api.rules.AnnotationRuleParser;
-import org.sonar.api.rules.XMLRuleParser;
 import org.sonar.api.server.rule.RulesDefinitionXmlLoader;
 import org.sonar.auth.github.GitHubModule;
 import org.sonar.auth.gitlab.GitLabModule;
@@ -299,7 +298,6 @@ public class PlatformLevel4 extends PlatformLevel {
       RuleIndexDefinition.class,
       RuleIndexer.class,
       AnnotationRuleParser.class,
-      XMLRuleParser.class,
       WebServerRuleFinderImpl.class,
       RuleDefinitionsLoader.class,
       CommonRuleDefinitionsImpl.class,
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/rules/XMLRuleParser.java b/sonar-plugin-api/src/main/java/org/sonar/api/rules/XMLRuleParser.java
deleted file mode 100644 (file)
index 466b3e4..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.api.rules;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.nio.file.Files;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLEventReader;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.events.Attribute;
-import javax.xml.stream.events.StartElement;
-import javax.xml.stream.events.XMLEvent;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.PropertyType;
-import org.sonar.api.ce.ComputeEngineSide;
-import org.sonar.api.server.ServerSide;
-import org.sonar.api.utils.SonarException;
-import org.sonar.check.Cardinality;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-/**
- * @since 2.3
- * @deprecated in 4.2. Replaced by org.sonar.api.server.rule.RulesDefinition and org.sonar.api.server.rule.RulesDefinitionXmlLoader
- */
-@Deprecated
-@ServerSide
-@ComputeEngineSide
-public final class XMLRuleParser {
-  private static final Map<String, String> TYPE_MAP = typeMapWithDeprecatedValues();
-  private static final String ELEMENT_RULES = "rules";
-  private static final String ELEMENT_RULE = "rule";
-  private static final String ELEMENT_PARAM = "param";
-
-  public List<Rule> parse(File file) {
-    try (Reader reader = new InputStreamReader(Files.newInputStream(file.toPath()), UTF_8)) {
-      return parse(reader);
-
-    } catch (IOException e) {
-      throw new SonarException("Fail to load the file: " + file, e);
-    }
-  }
-
-  /**
-   * Warning : the input stream is closed in this method
-   */
-  public List<Rule> parse(InputStream input) {
-    try (Reader reader = new InputStreamReader(input, UTF_8)) {
-      return parse(reader);
-
-    } catch (IOException e) {
-      throw new SonarException("Fail to load the xml stream", e);
-    }
-  }
-
-  public List<Rule> parse(Reader inputReader) {
-    XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
-    xmlFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
-    xmlFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
-    // just so it won't try to load DTD in if there's DOCTYPE
-    xmlFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
-    xmlFactory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE);
-    try {
-      final XMLEventReader reader = xmlFactory.createXMLEventReader(inputReader);
-      List<Rule> rules = new ArrayList<>();
-      while (reader.hasNext()) {
-        final XMLEvent event = reader.nextEvent();
-        if (event.isStartElement() && event.asStartElement().getName()
-          .getLocalPart().equals(ELEMENT_RULES)) {
-          parseRules(rules, reader);
-        }
-      }
-      return rules;
-
-    } catch (XMLStreamException e) {
-      throw new SonarException("XML is not valid", e);
-    }
-  }
-
-  private void parseRules(List<Rule> rules, XMLEventReader reader) throws XMLStreamException {
-    while (reader.hasNext()) {
-      final XMLEvent event = reader.nextEvent();
-      if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(ELEMENT_RULES)) {
-        return;
-      }
-      if (event.isStartElement()) {
-        final StartElement element = event.asStartElement();
-        final String elementName = element.getName().getLocalPart();
-        switch (elementName) {
-          case ELEMENT_RULE:
-            Rule rule = Rule.create();
-            rules.add(rule);
-            parseRule(rule, element, reader);
-            break;
-        }
-      }
-    }
-  }
-
-  private static void parseRule(Rule rule, StartElement ruleElement, XMLEventReader reader) throws XMLStreamException {
-    /* BACKWARD COMPATIBILITY WITH DEPRECATED FORMAT */
-    Attribute keyAttribute = ruleElement.getAttributeByName(new QName("key"));
-    if (keyAttribute != null && StringUtils.isNotBlank(keyAttribute.getValue())) {
-      rule.setKey(StringUtils.trim(keyAttribute.getValue()));
-    }
-
-    /* BACKWARD COMPATIBILITY WITH DEPRECATED FORMAT */
-    Attribute priorityAttribute = ruleElement.getAttributeByName(new QName("priority"));
-    if (priorityAttribute != null && StringUtils.isNotBlank(priorityAttribute.getValue())) {
-      rule.setSeverity(RulePriority.valueOf(StringUtils.trim(priorityAttribute.getValue())));
-    }
-
-    List<String> tags = new ArrayList<>();
-    while (reader.hasNext()) {
-      final XMLEvent event = reader.nextEvent();
-      if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(ELEMENT_RULE)) {
-        return;
-      }
-      if (event.isStartElement()) {
-        final StartElement element = event.asStartElement();
-        final String elementName = element.getName().getLocalPart().toLowerCase(Locale.ENGLISH);
-        switch (elementName) {
-          case "name":
-            rule.setName(StringUtils.trim(reader.getElementText()));
-            break;
-          case "description":
-            rule.setDescription(StringUtils.trim(reader.getElementText()));
-            break;
-          case "key":
-            rule.setKey(StringUtils.trim(reader.getElementText()));
-            break;
-          case "configkey":
-            rule.setConfigKey(StringUtils.trim(reader.getElementText()));
-            break;
-          case "priority":
-            rule.setSeverity(RulePriority.valueOf(StringUtils.trim(reader.getElementText())));
-            break;
-          case "cardinality":
-            rule.setCardinality(Cardinality.valueOf(StringUtils.trim(reader.getElementText())));
-            break;
-          case "status":
-            rule.setStatus(StringUtils.trim(reader.getElementText()));
-            break;
-          case ELEMENT_PARAM:
-            processParameter(rule, element, reader);
-            break;
-          case "tag":
-            tags.add(StringUtils.trim(reader.getElementText()));
-            break;
-        }
-      }
-    }
-    if (rule.getKey() == null || rule.getKey().isEmpty()) {
-      throw new SonarException("Node <key> is missing in <rule>");
-    }
-    rule.setTags(tags.toArray(new String[tags.size()]));
-  }
-
-  private static void processParameter(Rule rule, StartElement paramElement, XMLEventReader reader) throws XMLStreamException {
-    RuleParam param = rule.createParameter();
-
-    Attribute keyAttribute = paramElement.getAttributeByName(new QName("key"));
-    if (keyAttribute != null && StringUtils.isNotBlank(keyAttribute.getValue())) {
-      /* BACKWARD COMPATIBILITY WITH DEPRECATED FORMAT */
-      param.setKey(StringUtils.trim(keyAttribute.getValue()));
-    }
-
-    Attribute typeAttribute = paramElement.getAttributeByName(new QName("type"));
-    if (typeAttribute != null && StringUtils.isNotBlank(typeAttribute.getValue())) {
-      /* BACKWARD COMPATIBILITY WITH DEPRECATED FORMAT */
-      param.setType(type(StringUtils.trim(typeAttribute.getValue())));
-    }
-
-    while (reader.hasNext()) {
-      final XMLEvent event = reader.nextEvent();
-      if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals(ELEMENT_PARAM)) {
-        return;
-      }
-      if (event.isStartElement()) {
-        final StartElement element = event.asStartElement();
-        final String elementName = element.getName().getLocalPart().toLowerCase(Locale.ENGLISH);
-        switch (elementName) {
-          case "key":
-            param.setKey(StringUtils.trim(reader.getElementText()));
-            break;
-          case "description":
-            param.setDescription(StringUtils.trim(reader.getElementText()));
-            break;
-          case "type":
-            param.setType(type(StringUtils.trim(reader.getElementText())));
-            break;
-          case "defaultvalue":
-            param.setDefaultValue(StringUtils.trim(reader.getElementText()));
-            break;
-        }
-      }
-    }
-    if (StringUtils.isEmpty(param.getKey())) {
-      throw new SonarException("Node <key> is missing in <param>");
-    }
-  }
-
-  private static Map<String, String> typeMapWithDeprecatedValues() {
-    Map<String, String> map = new HashMap<>();
-    map.put("i", PropertyType.INTEGER.name());
-    map.put("s", PropertyType.STRING.name());
-    map.put("b", PropertyType.BOOLEAN.name());
-    map.put("r", PropertyType.REGULAR_EXPRESSION.name());
-    map.put("s{}", "s{}");
-    map.put("i{}", "i{}");
-    for (PropertyType propertyType : PropertyType.values()) {
-      map.put(propertyType.name(), propertyType.name());
-    }
-    return map;
-  }
-
-  static String type(String type) {
-    String validType = TYPE_MAP.get(type);
-    if (null != validType) {
-      return validType;
-    }
-
-    if (type.matches(".\\[.+\\]")) {
-      return type;
-    }
-    throw new SonarException("Invalid property type [" + type + "]");
-  }
-
-}