diff options
6 files changed, 41 insertions, 13 deletions
| diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java index ce98ede..57b6d0d 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java @@ -20,6 +20,7 @@  package org.sonar.css.plugin;  import com.google.gson.Gson; +import com.google.gson.GsonBuilder;  import com.google.gson.JsonSyntaxException;  import java.io.File;  import java.io.IOException; @@ -140,7 +141,10 @@ public class CssRuleSensor implements Sensor {    private void createConfig(File deployDestination) throws IOException {      String configPath = linterCommandProvider.configPath(deployDestination);      StylelintConfig config = cssRules.getConfig(); -    String configAsJson = new Gson().toJson(config); +    final GsonBuilder gsonBuilder = new GsonBuilder(); +    gsonBuilder.registerTypeAdapter(StylelintConfig.class, config); +    final Gson gson = gsonBuilder.create(); +    String configAsJson = gson.toJson(config);      Files.write(Paths.get(configPath), Collections.singletonList(configAsJson), StandardCharsets.UTF_8);    } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java index 926fff0..de51192 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java @@ -19,12 +19,18 @@   */  package org.sonar.css.plugin; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type;  import java.util.Arrays;  import java.util.Collection;  import java.util.Collections;  import java.util.HashMap;  import java.util.List;  import java.util.Map; +import java.util.Map.Entry;  import javax.annotation.Nullable;  import org.sonar.api.batch.rule.CheckFactory;  import org.sonar.api.batch.rule.Checks; @@ -113,7 +119,23 @@ public class CssRules {      return stylelintKeyToRuleKey.isEmpty();    } -  public static class StylelintConfig { -    Map<String, Object> rules = new HashMap<>(); +  public static class StylelintConfig implements JsonSerializer<StylelintConfig> { +    Map<String, List<Object>> rules = new HashMap<>(); + +    @Override +    public JsonElement serialize(StylelintConfig src, Type typeOfSrc, JsonSerializationContext context) { +      JsonObject stylelintJson = new JsonObject(); +      JsonObject rulesJson = new JsonObject(); +      stylelintJson.add("rules", rulesJson); +      for (Entry<String, List<Object>> stylelintOptions : rules.entrySet()) { +        List<Object> config = stylelintOptions.getValue(); +        if(config.isEmpty()) { +          rulesJson.addProperty(stylelintOptions.getKey(), true); +        } else { +          rulesJson.add(stylelintOptions.getKey(), context.serialize(stylelintOptions.getValue())); +        } +      } +      return stylelintJson; +    }    }  } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java index 756d822..36fb364 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java @@ -20,6 +20,7 @@  package org.sonar.css.plugin.rules;  import java.util.Arrays; +import java.util.List;  import org.sonar.check.Rule;  import org.sonar.check.RuleProperty; @@ -40,7 +41,7 @@ public class AtRuleNoUnknown implements CssRule {    }    @Override -  public Object stylelintOptions() { +  public List<Object> stylelintOptions() {      return Arrays.asList(true, new StylelintIgnoreOption(ignoredAtRules.split(",")));    } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java index fdc577b..eba3a70 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java @@ -19,11 +19,14 @@   */  package org.sonar.css.plugin.rules; +import java.util.Collections; +import java.util.List; +  public interface CssRule {    String stylelintKey(); -  default Object stylelintOptions() { -    return true; +  default List<Object> stylelintOptions() { +    return Collections.emptyList();    }  } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java index 474ee09..46c451e 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java @@ -42,8 +42,8 @@ public class DeclarationBlockNoDuplicateProperties implements CssRule {    }    @Override -  public Object stylelintOptions() { -    return ignoreFallbacks ? Arrays.asList(true, new StylelintIgnoreOption()) : true; +  public List<Object> stylelintOptions() { +    return ignoreFallbacks ? Arrays.asList(true, new StylelintIgnoreOption()) : Collections.emptyList();    }    private static class StylelintIgnoreOption { diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java index f839e49..670ffbf 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java @@ -38,15 +38,14 @@ public class CssRuleTest {    }    @Test -  public void rules_default_json_is_true() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { +  public void rules_default_is_empty() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {      for (Class ruleClass : CssRules.getRuleClasses()) {        CssRule rule = (CssRule)ruleClass.getConstructor().newInstance();        if (rule instanceof AtRuleNoUnknown || rule instanceof DeclarationBlockNoDuplicateProperties) {          continue;        } -      String optionsAsJson = new Gson().toJson(rule.stylelintOptions()); -      assertThat(optionsAsJson).isEqualTo("true"); +      assertThat(rule.stylelintOptions()).isEmpty();      }    } @@ -74,7 +73,6 @@ public class CssRuleTest {    public void declaration_block_no_duplicate_properties_custom() {      DeclarationBlockNoDuplicateProperties instance = new DeclarationBlockNoDuplicateProperties();      instance.ignoreFallbacks = false; -    String optionsAsJson = new Gson().toJson(instance.stylelintOptions()); -    assertThat(optionsAsJson).isEqualTo("true"); +    assertThat(instance.stylelintOptions()).isEmpty();    }  } | 
