From 8cadf539eb89408a1e186a666cf0b99d595d1304 Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Tue, 7 Aug 2018 11:10:34 +0200 Subject: [PATCH] Fix performance hotspot sonarlint --- .../api/batch/rule/internal/DefaultRules.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRules.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRules.java index b24af718aa1..336e509459a 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRules.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRules.java @@ -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 rulesByRepository; private final ImmutableTable> rulesByRepositoryAndInternalKey; + private final Map rulesByRuleKey; DefaultRules(Collection newRules) { + Map rulesByRuleKeyBuilder = new HashMap<>(); ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); Table> 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 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 -- 2.39.5