]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3879 Template rules have to be registered after all rules have been registered
authorJulien Lancelot <julien.lancelot@gmail.com>
Wed, 19 Jun 2013 14:46:31 +0000 (16:46 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Wed, 19 Jun 2013 14:46:31 +0000 (16:46 +0200)
sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java

index 2cd9f57b4fb686fdfa75082b772eaa689552c55f..5a06588e1b974e1bf0ed141c517a5d2e4835f668 100644 (file)
@@ -90,9 +90,10 @@ public final class RegisterRules {
     for (RuleRepository repository : repositories) {
       profiler.start("Register rules [" + repository.getKey() + "/" + StringUtils.defaultString(repository.getLanguage(), "-") + "]");
       registeredRules.addAll(registerRepositoryRules(repository, existingRules, session));
-      registeredRules.addAll(registerTemplateRules(repository, existingRules, registeredRules, session));
       profiler.stop();
     }
+    // Template rules have to be registered after all rules in order for their parent to be updated.
+    registeredRules.addAll(registerTemplateRules(registeredRules, existingRules, session));
     return registeredRules;
   }
 
@@ -120,11 +121,11 @@ public final class RegisterRules {
   }
 
   /**
-   * Template rules do not exists in the rule repository, only in database, but have to be updated.
+   * Template rules do not exists in the rule repository, only in database, but have to be updated from their parent rule.
    */
-  private List<Rule> registerTemplateRules(RuleRepository repository, RulesByRepository existingRules, List<Rule> registeredRules, DatabaseSession session) {
+  private List<Rule> registerTemplateRules(List<Rule> registeredRules, RulesByRepository existingRules, DatabaseSession session) {
     List<Rule> templateRules = newArrayList();
-    for (Rule persistedRule : existingRules.get(repository.getKey())) {
+    for (Rule persistedRule : existingRules.rules()) {
       Rule parent = persistedRule.getParent();
       if (parent != null && registeredRules.contains(parent)) {
         persistedRule.setRepositoryKey(parent.getRepositoryKey());