]> source.dussan.org Git - sonarqube.git/commitdiff
Fix performance hotspot sonarlint
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 7 Aug 2018 09:10:34 +0000 (11:10 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 7 Aug 2018 18:21:22 +0000 (20:21 +0200)
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRules.java

index b24af718aa18f295998bde90316212a33c74af2c..336e509459ac0b4ef5de0c1bcad8ebf6f827fae4 100644 (file)
@@ -25,7 +25,6 @@ import com.google.common.collect.HashBasedTable;
 import org.sonar.api.batch.rule.Rule;
 import com.google.common.collect.Table;
 import com.google.common.collect.ImmutableListMultimap;
-import org.apache.commons.lang.StringUtils;
 import org.sonar.api.batch.rule.Rules;
 import org.sonar.api.rule.RuleKey;
 
@@ -33,24 +32,30 @@ import javax.annotation.concurrent.Immutable;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 @Immutable
 class DefaultRules implements Rules {
   private final ImmutableListMultimap<String, Rule> rulesByRepository;
   private final ImmutableTable<String, String, List<Rule>> rulesByRepositoryAndInternalKey;
+  private final Map<RuleKey, Rule> rulesByRuleKey;
 
   DefaultRules(Collection<NewRule> newRules) {
+    Map<RuleKey, Rule> rulesByRuleKeyBuilder = new HashMap<>();
     ImmutableListMultimap.Builder<String, Rule> builder = ImmutableListMultimap.builder();
     Table<String, String, List<Rule>> tableBuilder = HashBasedTable.create();
 
     for (NewRule newRule : newRules) {
       DefaultRule r = new DefaultRule(newRule);
+      rulesByRuleKeyBuilder.put(r.key(), r);
       builder.put(r.key().repository(), r);
       addToTable(tableBuilder, r);
     }
 
+    rulesByRuleKey = Collections.unmodifiableMap(rulesByRuleKeyBuilder);
     rulesByRepository = builder.build();
     rulesByRepositoryAndInternalKey = ImmutableTable.copyOf(tableBuilder);
   }
@@ -72,13 +77,7 @@ class DefaultRules implements Rules {
 
   @Override
   public Rule find(RuleKey ruleKey) {
-    List<Rule> rules = rulesByRepository.get(ruleKey.repository());
-    for (Rule rule : rules) {
-      if (StringUtils.equals(rule.key().rule(), ruleKey.rule())) {
-        return rule;
-      }
-    }
-    return null;
+    return rulesByRuleKey.get(ruleKey);
   }
 
   @Override