]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6706 org.sonar.api.rules.ActiveRule.getRule().getTemplate() is always null...
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 9 Jul 2015 13:40:45 +0000 (15:40 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 9 Jul 2015 13:45:14 +0000 (15:45 +0200)
sonar-batch/src/main/java/org/sonar/batch/rule/RulesProfileProvider.java
sonar-batch/src/test/java/org/sonar/batch/rule/RulesProfileProviderTest.java

index f890761ba3772c8fa40b932e2116c73d2d6748dc..7ab4959321d367762667ac4b84493237494c254d 100644 (file)
 package org.sonar.batch.rule;
 
 import com.google.common.collect.Lists;
+import java.util.Collection;
+import java.util.Map;
 import org.apache.commons.lang.StringUtils;
 import org.picocontainer.injectors.ProviderAdapter;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.batch.rule.internal.DefaultActiveRules;
 import org.sonar.api.config.Settings;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.rules.ActiveRule;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RulePriority;
 
-import java.util.Collection;
-import java.util.Map;
-
 /**
  * Ensures backward-compatibility with extensions that use {@link org.sonar.api.profiles.RulesProfile}.
  */
@@ -75,9 +73,15 @@ public class RulesProfileProvider extends ProviderAdapter {
     // TODO deprecatedProfile.setVersion(qProfile.version());
     deprecatedProfile.setName(qProfile.getName());
     deprecatedProfile.setLanguage(qProfile.getLanguage());
-    for (org.sonar.api.batch.rule.ActiveRule activeRule : ((DefaultActiveRules) activeRules).findByLanguage(qProfile.getLanguage())) {
+    for (org.sonar.api.batch.rule.ActiveRule activeRule : activeRules.findByLanguage(qProfile.getLanguage())) {
       Rule rule = Rule.create(activeRule.ruleKey().repository(), activeRule.ruleKey().rule());
       rule.setConfigKey(activeRule.internalKey());
+
+      // SONAR-6706
+      if (activeRule.templateRuleKey() != null) {
+        rule.setTemplate(Rule.create(activeRule.ruleKey().repository(), activeRule.templateRuleKey()));
+      }
+
       ActiveRule deprecatedActiveRule = deprecatedProfile.activateRule(rule,
         RulePriority.valueOf(activeRule.severity()));
       for (Map.Entry<String, String> param : activeRule.params().entrySet()) {
index e1a52981d120dcb74a2335e3586e4b2da145b06b..93aab184a18a96d0a8fa8c3ea907e98e12814b37 100644 (file)
  */
 package org.sonar.batch.rule;
 
+import java.util.Arrays;
 import org.junit.Test;
-import org.sonar.api.batch.rule.ActiveRules;
 import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
 import org.sonar.api.config.Settings;
 import org.sonar.api.profiles.RulesProfile;
-
-import java.util.Arrays;
+import org.sonar.api.rule.RuleKey;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
@@ -35,7 +34,6 @@ import static org.mockito.Mockito.when;
 public class RulesProfileProviderTest {
 
   ModuleQProfiles qProfiles = mock(ModuleQProfiles.class);
-  ActiveRules activeRules = new ActiveRulesBuilder().build();
   Settings settings = new Settings();
   RulesProfileProvider provider = new RulesProfileProvider();
 
@@ -44,7 +42,7 @@ public class RulesProfileProviderTest {
     QProfile qProfile = new QProfile().setKey("java-sw").setName("Sonar way").setLanguage("java");
     when(qProfiles.findAll()).thenReturn(Arrays.asList(qProfile));
 
-    RulesProfile profile = provider.provide(qProfiles, activeRules, settings);
+    RulesProfile profile = provider.provide(qProfiles, new ActiveRulesBuilder().build(), settings);
 
     // merge of all profiles
     assertThat(profile).isNotNull().isInstanceOf(RulesProfileWrapper.class);
@@ -66,12 +64,23 @@ public class RulesProfileProviderTest {
     QProfile qProfile = new QProfile().setKey("java-sw").setName("Sonar way").setLanguage("java");
     when(qProfiles.findByLanguage("java")).thenReturn(qProfile);
 
-    RulesProfile profile = provider.provide(qProfiles, activeRules, settings);
+    RulesProfile profile = provider.provide(qProfiles, new ActiveRulesBuilder().build(), settings);
 
     // no merge, directly the old hibernate profile
     assertThat(profile).isNotNull();
     assertThat(profile.getLanguage()).isEqualTo("java");
     assertThat(profile.getName()).isEqualTo("Sonar way");
-    ;
+  }
+
+  @Test
+  public void support_rule_templates() {
+    QProfile qProfile = new QProfile().setKey("java-sw").setName("Sonar way").setLanguage("java");
+    when(qProfiles.findAll()).thenReturn(Arrays.asList(qProfile));
+    ActiveRulesBuilder activeRulesBuilder = new ActiveRulesBuilder();
+    activeRulesBuilder.create(RuleKey.of("java", "S001")).setTemplateRuleKey("T001").setLanguage("java").activate();
+
+    RulesProfile profile = provider.provide(qProfiles, activeRulesBuilder.build(), settings);
+
+    assertThat(profile.getActiveRule("java", "S001").getRule().getTemplate().getKey()).isEqualTo("T001");
   }
 }