diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2011-11-24 17:15:31 +0100 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2011-11-24 17:18:30 +0100 |
commit | 36f47f4b53f8a5b8befecf89ce6e10c977ba874c (patch) | |
tree | 85cfcc52d4fc386f477a2f82f723fcc079002609 /plugins | |
parent | 47140a13d3cc91f8b71426cb767dc382f9a3ef9e (diff) | |
download | sonarqube-36f47f4b53f8a5b8befecf89ce6e10c977ba874c.tar.gz sonarqube-36f47f4b53f8a5b8befecf89ce6e10c977ba874c.zip |
SONAR-3029 API: allow to have different severities for violations related to the same rule
Diffstat (limited to 'plugins')
11 files changed, 247 insertions, 258 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/ViolationsDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/ViolationsDecorator.java index ebe4f47397f..c349eac99ab 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/ViolationsDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/ViolationsDecorator.java @@ -39,56 +39,98 @@ import java.util.Map; @DependsUpon(DecoratorBarriers.END_OF_VIOLATION_TRACKING) public class ViolationsDecorator implements Decorator { - // temporary data for current resource - private Multiset<Rule> rules = HashMultiset.create(); - private Multiset<RulePriority> severities = HashMultiset.create(); - private Map<Rule, RulePriority> ruleToSeverity = Maps.newHashMap(); - private int total = 0; - public boolean shouldExecuteOnProject(Project project) { return true; } + private boolean shouldDecorateResource(Resource resource) { + return !ResourceUtils.isUnitTestClass(resource); + } + @DependedUpon public List<Metric> generatesViolationsMetrics() { return Arrays.asList(CoreMetrics.VIOLATIONS, - CoreMetrics.BLOCKER_VIOLATIONS, CoreMetrics.CRITICAL_VIOLATIONS, CoreMetrics.MAJOR_VIOLATIONS, CoreMetrics.MINOR_VIOLATIONS, CoreMetrics.INFO_VIOLATIONS); + CoreMetrics.BLOCKER_VIOLATIONS, + CoreMetrics.CRITICAL_VIOLATIONS, + CoreMetrics.MAJOR_VIOLATIONS, + CoreMetrics.MINOR_VIOLATIONS, + CoreMetrics.INFO_VIOLATIONS); } public void decorate(Resource resource, DecoratorContext context) { if (shouldDecorateResource(resource)) { - resetCounters(); - countViolations(context); - saveTotalViolations(context); - saveViolationsBySeverity(context); - saveViolationsByRule(context); + computeTotalViolations(context); + computeViolationsPerSeverities(context); + computeViolationsPerRules(context); } } - private boolean shouldDecorateResource(Resource resource) { - return !ResourceUtils.isUnitTestClass(resource); + private void computeTotalViolations(DecoratorContext context) { + if (context.getMeasure(CoreMetrics.VIOLATIONS) == null) { + Collection<Measure> childrenViolations = context.getChildrenMeasures(CoreMetrics.VIOLATIONS); + Double sum = MeasureUtils.sum(true, childrenViolations); + context.saveMeasure(CoreMetrics.VIOLATIONS, sum + context.getViolations().size()); + } } - private void resetCounters() { - rules.clear(); - severities.clear(); - ruleToSeverity.clear(); - total = 0; - } + private void computeViolationsPerSeverities(DecoratorContext context) { + Multiset<RulePriority> severitiesBag = HashMultiset.create(); + for (Violation violation : context.getViolations()) { + severitiesBag.add(violation.getSeverity()); + } - private void saveViolationsBySeverity(DecoratorContext context) { for (RulePriority severity : RulePriority.values()) { - Metric metric = getMetricForSeverity(severity); + Metric metric = severityToMetric(severity); if (context.getMeasure(metric) == null) { Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric)); - double sum = MeasureUtils.sum(true, children) + severities.count(severity); - context.saveMeasure(new Measure(metric, sum)); + int sum = MeasureUtils.sum(true, children).intValue() + severitiesBag.count(severity); + context.saveMeasure(metric, (double) sum); + } + } + } + + private void computeViolationsPerRules(DecoratorContext context) { + Map<RulePriority, Multiset<Rule>> rulesPerSeverity = Maps.newHashMap(); + for (Violation violation : context.getViolations()) { + Multiset<Rule> rulesBag = initRules(rulesPerSeverity, violation.getSeverity()); + rulesBag.add(violation.getRule()); + } + + for (RulePriority severity : RulePriority.values()) { + Metric metric = severityToMetric(severity); + + Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(metric)); + for (Measure child : children) { + RuleMeasure childRuleMeasure = (RuleMeasure) child; + Rule rule = childRuleMeasure.getRule(); + if (rule != null && MeasureUtils.hasValue(childRuleMeasure)) { + Multiset<Rule> rulesBag = initRules(rulesPerSeverity, severity); + rulesBag.add(rule, childRuleMeasure.getIntValue()); + } + } + + Multiset<Rule> rulesBag = rulesPerSeverity.get(severity); + if (rulesBag != null) { + for (Multiset.Entry<Rule> entry : rulesBag.entrySet()) { + RuleMeasure measure = RuleMeasure.createForRule(metric, entry.getElement(), (double) entry.getCount()); + measure.setRulePriority(severity); + context.saveMeasure(measure); + } } } } - private Metric getMetricForSeverity(RulePriority severity) { - Metric metric = null; + private Multiset<Rule> initRules(Map<RulePriority, Multiset<Rule>> rulesPerSeverity, RulePriority severity) { + Multiset<Rule> rulesBag = rulesPerSeverity.get(severity); + if (rulesBag == null) { + rulesBag = HashMultiset.create(); + rulesPerSeverity.put(severity, rulesBag); + } + return rulesBag; + } + + static Metric severityToMetric(RulePriority severity) { + Metric metric; if (severity.equals(RulePriority.BLOCKER)) { metric = CoreMetrics.BLOCKER_VIOLATIONS; } else if (severity.equals(RulePriority.CRITICAL)) { @@ -99,46 +141,12 @@ public class ViolationsDecorator implements Decorator { metric = CoreMetrics.MINOR_VIOLATIONS; } else if (severity.equals(RulePriority.INFO)) { metric = CoreMetrics.INFO_VIOLATIONS; + } else { + throw new IllegalArgumentException("Unsupported severity: " + severity); } return metric; } - private void saveViolationsByRule(DecoratorContext context) { - Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(CoreMetrics.VIOLATIONS)); - for (Measure childMeasure : children) { - RuleMeasure childRuleMeasure = (RuleMeasure) childMeasure; - Rule rule = childRuleMeasure.getRule(); - if (rule != null && MeasureUtils.hasValue(childRuleMeasure)) { - rules.add(rule, childRuleMeasure.getValue().intValue()); - ruleToSeverity.put(childRuleMeasure.getRule(), childRuleMeasure.getRulePriority()); - } - } - for (Multiset.Entry<Rule> entry : rules.entrySet()) { - Rule rule = entry.getElement(); - RuleMeasure measure = RuleMeasure.createForRule(CoreMetrics.VIOLATIONS, rule, (double) entry.getCount()); - measure.setRulePriority(ruleToSeverity.get(rule)); - context.saveMeasure(measure); - } - } - - private void saveTotalViolations(DecoratorContext context) { - if (context.getMeasure(CoreMetrics.VIOLATIONS) == null) { - Collection<Measure> childrenViolations = context.getChildrenMeasures(CoreMetrics.VIOLATIONS); - Double sum = MeasureUtils.sum(true, childrenViolations) + total; - context.saveMeasure(new Measure(CoreMetrics.VIOLATIONS, sum)); - } - } - - private void countViolations(DecoratorContext context) { - List<Violation> violations = context.getViolations(); - for (Violation violation : violations) { - rules.add(violation.getRule()); - severities.add(violation.getSeverity()); - ruleToSeverity.put(violation.getRule(), violation.getSeverity()); - } - total = violations.size(); - } - @Override public String toString() { return getClass().getSimpleName(); diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/WeightedViolationsDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/WeightedViolationsDecorator.java index 330cf8fe365..c25f6415a3e 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/WeightedViolationsDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/WeightedViolationsDecorator.java @@ -25,23 +25,27 @@ import org.sonar.api.batch.Decorator; import org.sonar.api.batch.DecoratorContext; import org.sonar.api.batch.DependedUpon; import org.sonar.api.batch.DependsUpon; -import org.sonar.api.measures.*; +import org.sonar.api.measures.CoreMetrics; +import org.sonar.api.measures.Measure; +import org.sonar.api.measures.MeasureUtils; +import org.sonar.api.measures.Metric; import org.sonar.api.resources.Project; import org.sonar.api.resources.Resource; import org.sonar.api.rules.RulePriority; import org.sonar.api.rules.RuleUtils; +import org.sonar.api.rules.Violation; import org.sonar.api.utils.KeyValueFormat; +import java.util.Arrays; +import java.util.List; import java.util.Map; public class WeightedViolationsDecorator implements Decorator { - private Map<RulePriority, Integer> weights; - - @DependsUpon - public Metric dependsUponViolations() { - return CoreMetrics.VIOLATIONS; + public List<Metric> dependsUponViolations() { + return Arrays.asList(CoreMetrics.BLOCKER_VIOLATIONS, CoreMetrics.CRITICAL_VIOLATIONS, + CoreMetrics.MAJOR_VIOLATIONS, CoreMetrics.MINOR_VIOLATIONS, CoreMetrics.INFO_VIOLATIONS); } @DependedUpon @@ -49,44 +53,50 @@ public class WeightedViolationsDecorator implements Decorator { return CoreMetrics.WEIGHTED_VIOLATIONS; } - public WeightedViolationsDecorator() { - } - - /** - * for unit tests - */ - WeightedViolationsDecorator(Map<RulePriority, Integer> weights) { - this.weights = weights; - } - - private void loadWeights(DecoratorContext context) { - if (weights == null && context != null) { - weights = RuleUtils.getPriorityWeights(context.getProject().getConfiguration()); - } - } - public boolean shouldExecuteOnProject(Project project) { return true; } public void decorate(Resource resource, DecoratorContext context) { - loadWeights(context); + decorate(context, RuleUtils.getPriorityWeights(context.getProject().getConfiguration())); + } + void decorate(DecoratorContext context, Map<RulePriority, Integer> weights) { double debt = 0.0; - Multiset<RulePriority> violationsByPriority = TreeMultiset.create(); + Multiset<RulePriority> distribution = TreeMultiset.create(); - for (RuleMeasure violations : context.getMeasures(MeasuresFilters.rules(CoreMetrics.VIOLATIONS))) { - if (MeasureUtils.hasValue(violations)) { - violationsByPriority.add(violations.getRulePriority(), violations.getValue().intValue()); - double add = (int) weights.get(violations.getRulePriority()) * violations.getValue(); + for (RulePriority severity : RulePriority.values()) { + Measure measure = context.getMeasure(severityToMetric(severity)); + if (measure != null && MeasureUtils.hasValue(measure)) { + distribution.add(severity, measure.getIntValue()); + double add = weights.get(severity) * measure.getIntValue(); debt += add; } } - Measure debtMeasure = new Measure(CoreMetrics.WEIGHTED_VIOLATIONS, debt, KeyValueFormat.format(violationsByPriority)); + Measure debtMeasure = new Measure(CoreMetrics.WEIGHTED_VIOLATIONS, debt, KeyValueFormat.format(distribution)); saveMeasure(context, debtMeasure); } + static Metric severityToMetric(RulePriority severity) { + Metric metric; + if (severity.equals(RulePriority.BLOCKER)) { + metric = CoreMetrics.BLOCKER_VIOLATIONS; + } else if (severity.equals(RulePriority.CRITICAL)) { + metric = CoreMetrics.CRITICAL_VIOLATIONS; + } else if (severity.equals(RulePriority.MAJOR)) { + metric = CoreMetrics.MAJOR_VIOLATIONS; + } else if (severity.equals(RulePriority.MINOR)) { + metric = CoreMetrics.MINOR_VIOLATIONS; + } else if (severity.equals(RulePriority.INFO)) { + metric = CoreMetrics.INFO_VIOLATIONS; + } else { + throw new IllegalArgumentException("Unsupported severity: " + severity); + } + return metric; + } + + private void saveMeasure(DecoratorContext context, Measure debtMeasure) { if (debtMeasure.getValue() > 0.0) { context.saveMeasure(debtMeasure); diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java index e603fb1f129..144f398978b 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java @@ -20,6 +20,7 @@ package org.sonar.plugins.core.timemachine; import com.google.common.collect.*; +import com.sun.xml.internal.bind.v2.util.QNameMap; import org.apache.commons.lang.StringUtils; import org.sonar.api.batch.*; import org.sonar.api.measures.*; @@ -40,11 +41,6 @@ public class NewViolationsDecorator implements Decorator { private TimeMachineConfiguration timeMachineConfiguration; - // temporary data for current resource - private Map<Rule, RulePriority> ruleToLevel = Maps.newHashMap(); - private Multimap<RulePriority, Violation> violationsBySeverity = ArrayListMultimap.create(); - private Multimap<Rule, Violation> violationsByRule = ArrayListMultimap.create(); - public NewViolationsDecorator(TimeMachineConfiguration timeMachineConfiguration) { this.timeMachineConfiguration = timeMachineConfiguration; } @@ -56,42 +52,30 @@ public class NewViolationsDecorator implements Decorator { @DependedUpon public List<Metric> generatesMetric() { return Arrays.asList( - CoreMetrics.NEW_VIOLATIONS, CoreMetrics.NEW_BLOCKER_VIOLATIONS, CoreMetrics.NEW_CRITICAL_VIOLATIONS, - CoreMetrics.NEW_MAJOR_VIOLATIONS, CoreMetrics.NEW_MINOR_VIOLATIONS, CoreMetrics.NEW_INFO_VIOLATIONS); + CoreMetrics.NEW_VIOLATIONS, + CoreMetrics.NEW_BLOCKER_VIOLATIONS, + CoreMetrics.NEW_CRITICAL_VIOLATIONS, + CoreMetrics.NEW_MAJOR_VIOLATIONS, + CoreMetrics.NEW_MINOR_VIOLATIONS, + CoreMetrics.NEW_INFO_VIOLATIONS); } public void decorate(Resource resource, DecoratorContext context) { if (shouldDecorateResource(resource, context)) { - prepareCurrentResourceViolations(context); - saveNewViolations(context); - saveNewViolationsBySeverity(context); - saveNewViolationsByRule(context); - clearCache(); + computeNewViolations(context); + computeNewViolationsPerSeverity(context); + computeNewViolationsPerRule(context); } } private boolean shouldDecorateResource(Resource resource, DecoratorContext context) { return - (StringUtils.equals(Scopes.PROJECT, resource.getScope()) || StringUtils.equals(Scopes.DIRECTORY, resource.getScope()) || StringUtils.equals(Scopes.FILE, resource.getScope())) - && !ResourceUtils.isUnitTestClass(resource) && context.getMeasure(CoreMetrics.NEW_VIOLATIONS) == null; + (StringUtils.equals(Scopes.PROJECT, resource.getScope()) || StringUtils.equals(Scopes.DIRECTORY, resource.getScope()) || StringUtils.equals(Scopes.FILE, resource.getScope())) + && !ResourceUtils.isUnitTestClass(resource) + && context.getMeasure(CoreMetrics.NEW_VIOLATIONS) == null; } - - private void clearCache() { - ruleToLevel.clear(); - violationsBySeverity.clear(); - violationsByRule.clear(); - } - - private void prepareCurrentResourceViolations(DecoratorContext context) { - for (Violation violation : context.getViolations()) { - violationsBySeverity.put(violation.getSeverity(), violation); - violationsByRule.put(violation.getRule(), violation); - ruleToLevel.put(violation.getRule(), violation.getSeverity()); - } - } - - private void saveNewViolations(DecoratorContext context) { + private void computeNewViolations(DecoratorContext context) { Measure measure = new Measure(CoreMetrics.NEW_VIOLATIONS); for (PastSnapshot pastSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) { int variationIndex = pastSnapshot.getIndex(); @@ -103,13 +87,18 @@ public class NewViolationsDecorator implements Decorator { context.saveMeasure(measure); } - private void saveNewViolationsBySeverity(DecoratorContext context) { - for (RulePriority priority : RulePriority.values()) { - Metric metric = getMetricForSeverity(priority); + private void computeNewViolationsPerSeverity(DecoratorContext context) { + ListMultimap<RulePriority, Violation> violationsPerSeverities = ArrayListMultimap.create(); + for (Violation violation : context.getViolations()) { + violationsPerSeverities.put(violation.getSeverity(), violation); + } + + for (RulePriority severity : RulePriority.values()) { + Metric metric = severityToMetric(severity); Measure measure = new Measure(metric); for (PastSnapshot pastSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) { int variationIndex = pastSnapshot.getIndex(); - int count = countViolations(violationsBySeverity.get(priority), pastSnapshot.getTargetDate()); + int count = countViolations(violationsPerSeverities.get(severity), pastSnapshot.getTargetDate()); Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric)); double sum = sumChildren(variationIndex, children) + count; measure.setVariation(variationIndex, sum); @@ -118,31 +107,41 @@ public class NewViolationsDecorator implements Decorator { } } - private void saveNewViolationsByRule(DecoratorContext context) { - ListMultimap<Rule, Measure> childrenByRule = ArrayListMultimap.create(); - Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(CoreMetrics.NEW_VIOLATIONS)); - for (Measure childMeasure : children) { - RuleMeasure childRuleMeasure = (RuleMeasure) childMeasure; - Rule rule = childRuleMeasure.getRule(); - if (rule != null) { - childrenByRule.put(rule, childMeasure); - ruleToLevel.put(childRuleMeasure.getRule(), childRuleMeasure.getRulePriority()); + private void computeNewViolationsPerRule(DecoratorContext context) { + for (RulePriority severity : RulePriority.values()) { + Metric metric = severityToMetric(severity); + ListMultimap<Rule, Measure> childMeasuresPerRule = ArrayListMultimap.create(); + ListMultimap<Rule, Violation> violationsPerRule = ArrayListMultimap.create(); + Set<Rule> rules = Sets.newHashSet(); + + Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.rules(metric)); + for (Measure child : children) { + RuleMeasure childRuleMeasure = (RuleMeasure) child; + Rule rule = childRuleMeasure.getRule(); + if (rule != null) { + childMeasuresPerRule.put(rule, childRuleMeasure); + rules.add(rule); + } } - } - Set<Rule> rules = Sets.newHashSet(violationsByRule.keys()); - rules.addAll(childrenByRule.keys()); + for (Violation violation : context.getViolations()) { + if (violation.getSeverity().equals(severity)) { + rules.add(violation.getRule()); + violationsPerRule.put(violation.getRule(), violation); + } + } - for (Rule rule : rules) { - RuleMeasure measure = RuleMeasure.createForRule(CoreMetrics.NEW_VIOLATIONS, rule, null); - measure.setRulePriority(ruleToLevel.get(rule)); - for (PastSnapshot pastSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) { - int variationIndex = pastSnapshot.getIndex(); - int count = countViolations(violationsByRule.get(rule), pastSnapshot.getTargetDate()); - double sum = sumChildren(variationIndex, childrenByRule.get(rule)) + count; - measure.setVariation(variationIndex, sum); + for (Rule rule : rules) { + RuleMeasure measure = RuleMeasure.createForRule(metric, rule, null); + measure.setRulePriority(severity); + for (PastSnapshot pastSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) { + int variationIndex = pastSnapshot.getIndex(); + int count = countViolations(violationsPerRule.get(rule), pastSnapshot.getTargetDate()); + double sum = sumChildren(variationIndex, childMeasuresPerRule.get(rule)) + count; + measure.setVariation(variationIndex, sum); + } + context.saveMeasure(measure); } - context.saveMeasure(measure); } } @@ -177,7 +176,7 @@ public class NewViolationsDecorator implements Decorator { return violation.getCreatedAt() != null && violation.getCreatedAt().after(date); } - private Metric getMetricForSeverity(RulePriority severity) { + private Metric severityToMetric(RulePriority severity) { Metric metric; if (severity.equals(RulePriority.BLOCKER)) { metric = CoreMetrics.NEW_BLOCKER_VIOLATIONS; @@ -190,7 +189,7 @@ public class NewViolationsDecorator implements Decorator { } else if (severity.equals(RulePriority.INFO)) { metric = CoreMetrics.NEW_INFO_VIOLATIONS; } else { - throw new IllegalArgumentException("Not supported severity: " + severity); + throw new IllegalArgumentException("Unsupported severity: " + severity); } return metric; } diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java index cb10c34d886..e78a3db9c14 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java @@ -99,9 +99,8 @@ public class VariationDecorator implements Decorator { Integer metricId = (measure.getMetric().getId() != null ? measure.getMetric().getId() : metricFinder.findByKey(measure.getMetric().getKey()).getId()); Integer characteristicId = (measure.getCharacteristic() != null ? measure.getCharacteristic().getId() : null); Integer ruleId = (measure instanceof RuleMeasure ? ((RuleMeasure)measure).getRule().getId() : null); - Integer severityId = (measure instanceof RuleMeasure ? ((RuleMeasure)measure).getRulePriority().ordinal() : null); - Object[] pastMeasure = pastMeasuresByKey.get(new MeasureKey(metricId, characteristicId, ruleId, severityId)); + Object[] pastMeasure = pastMeasuresByKey.get(new MeasureKey(metricId, characteristicId, ruleId)); if (updateVariation(measure, pastMeasure, index)) { context.saveMeasure(measure); } @@ -126,20 +125,17 @@ public class VariationDecorator implements Decorator { int metricId; Integer characteristicId; Integer ruleId; - Integer severityId; MeasureKey(Object[] pastFields) { metricId = PastMeasuresLoader.getMetricId(pastFields); characteristicId = PastMeasuresLoader.getCharacteristicId(pastFields); ruleId = PastMeasuresLoader.getRuleId(pastFields); - severityId = PastMeasuresLoader.getSeverityId(pastFields); } - MeasureKey(int metricId, Integer characteristicId, Integer ruleId, Integer severityId) { + MeasureKey(int metricId, Integer characteristicId, Integer ruleId) { this.metricId = metricId; this.characteristicId = characteristicId; this.ruleId = ruleId; - this.severityId = severityId; } @Override @@ -160,9 +156,6 @@ public class VariationDecorator implements Decorator { if (ruleId != null ? !ruleId.equals(that.ruleId) : that.ruleId != null) { return false; } - if (severityId != null ? !severityId.equals(that.severityId) : that.severityId != null) { - return false; - } return true; } @@ -171,7 +164,6 @@ public class VariationDecorator implements Decorator { int result = metricId; result = 31 * result + (characteristicId != null ? characteristicId.hashCode() : 0); result = 31 * result + (ruleId != null ? ruleId.hashCode() : 0); - result = 31 * result + (severityId != null ? severityId.hashCode() : 0); return result; } } diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/hotspot_most_violated_rules.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/hotspot_most_violated_rules.html.erb index 034d8b31021..0a646e060b5 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/hotspot_most_violated_rules.html.erb +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/hotspot_most_violated_rules.html.erb @@ -91,12 +91,12 @@ %> <tr class="<%= cycle 'even','odd', :name => ('hotspot_most_violated_rules' + widget.id.to_s) -%>"> <td class="thin"> - <a href="<%= url_for(:controller => 'drilldown', :action => 'violations', :id => @resource.key, :priority => Sonar::RulePriority.to_s(m.rule_priority)) -%>"> + <a href="<%= url_for(:controller => 'drilldown', :action => 'violations', :id => @resource.key, :severity => m.severity) -%>"> <%= image_tag('priority/' + m.rule_priority.to_s + '.png') -%> </a> </td> <td> - <a href="<%= url_for(:controller => 'drilldown', :action => 'violations', :id => @resource.key, :rule => rule.key) -%>"><%= rule.name -%></a> + <a href="<%= url_for(:controller => 'drilldown', :action => 'violations', :id => @resource.key, :rule => rule.key, :rule_sev => m.severity) -%>"><%= rule.name -%></a> </td> <td class="right"> <%= m.formatted_value -%> diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb index 456fdafdf17..8db7c377ff8 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb @@ -21,7 +21,7 @@ <h3><%= message('widget.rules.rules_compliance') -%></h3> <div> <span class="big"> - <%= format_measure(density, :url => url_for_drilldown(Metric::WEIGHTED_VIOLATIONS, {:highlight => Metric::WEIGHTED_VIOLATIONS})) -%> + <%= format_measure(density, :url => url_for_drilldown('weighted_violations', {:highlight => 'weighted_violations'})) -%> </span> <%= dashboard_configuration.selected_period? ? format_variation(density) : trend_icon(density) -%> </div> @@ -40,7 +40,7 @@ <table class="clear width100"> <tr> <td><%= image_tag 'priority/BLOCKER.png'%></td> - <td> <%= link_to message('blocker'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'BLOCKER'} %></td> + <td> <%= link_to message('blocker'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :severity => 'BLOCKER'} %></td> <td style="padding: 0 10px;" align="right"> <%= format_measure(blocker_violations) -%> </td> @@ -60,7 +60,7 @@ </tr> <tr> <td><%= image_tag 'priority/CRITICAL.png' %></td> - <td> <%= link_to message('critical'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'CRITICAL'} %></td> + <td> <%= link_to message('critical'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :severity => 'CRITICAL'} %></td> <td style="padding: 0 10px;" align="right"> <%= format_measure(critical_violations) -%> </td> @@ -80,7 +80,7 @@ </tr> <tr> <td><%= image_tag 'priority/MAJOR.png' %></td> - <td> <%= link_to message('major'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'MAJOR'} %></td> + <td> <%= link_to message('major'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :severity => 'MAJOR'} %></td> <td style="padding: 0 10px;" align="right"> <%= format_measure(major_violations) -%> </td> @@ -100,7 +100,7 @@ </tr> <tr> <td><%= image_tag 'priority/MINOR.png' %></td> - <td> <%= link_to message('minor'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'MINOR'} %></td> + <td> <%= link_to message('minor'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :severity => 'MINOR'} %></td> <td style="padding: 0 10px;" align="right"> <%= format_measure(minor_violations) -%> </td> @@ -120,7 +120,7 @@ </tr> <tr> <td><%= image_tag 'priority/INFO.png' %></td> - <td> <%= link_to message('info'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'INFO'} %></td> + <td> <%= link_to message('info'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :severity => 'INFO'} %></td> <td style="padding: 0 10px;" align="right"> <%= format_measure(info_violations) -%> </td> diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ViolationsDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ViolationsDecoratorTest.java index 73173480748..a387627919a 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ViolationsDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ViolationsDecoratorTest.java @@ -27,6 +27,7 @@ import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Measure; import org.sonar.api.measures.MeasuresFilter; import org.sonar.api.resources.Resource; +import org.sonar.api.resources.Scopes; import org.sonar.api.rules.Rule; import org.sonar.api.rules.RulePriority; import org.sonar.api.rules.Violation; @@ -38,6 +39,7 @@ import java.util.List; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.argThat; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; public class ViolationsDecoratorTest { @@ -61,14 +63,14 @@ public class ViolationsDecoratorTest { } @Test - public void countViolations() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SET); + public void shouldCountViolations() { + when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 4.0))); + verify(context).saveMeasure(CoreMetrics.VIOLATIONS, 4.0); } /** @@ -76,7 +78,7 @@ public class ViolationsDecoratorTest { */ @Test public void shouldNotCountViolationsIfMeasureAlreadyExists() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SET); + when(resource.getScope()).thenReturn(Scopes.PROJECT); when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); when(context.getMeasure(CoreMetrics.VIOLATIONS)).thenReturn(new Measure(CoreMetrics.VIOLATIONS, 3000.0)); @@ -84,71 +86,75 @@ public class ViolationsDecoratorTest { decorator.decorate(resource, context); - verify(context, never()).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 4.0)));// not changed - verify(context, never()).saveMeasure(argThat(new IsMeasure(CoreMetrics.MAJOR_VIOLATIONS)));// not changed - verify(context, times(1)).saveMeasure(argThat(new IsMeasure(CoreMetrics.CRITICAL_VIOLATIONS)));// did not exist + verify(context, never()).saveMeasure(eq(CoreMetrics.VIOLATIONS), anyDouble());// not changed + verify(context, never()).saveMeasure(eq(CoreMetrics.MAJOR_VIOLATIONS), anyDouble());// not changed + verify(context, times(1)).saveMeasure(eq(CoreMetrics.CRITICAL_VIOLATIONS), anyDouble());// did not exist } @Test - public void resetCountersAfterExecution() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SET); - when(context.getViolations()).thenReturn(createViolations()); + public void shouldSaveZeroOnProjects() { + when(resource.getScope()).thenReturn(Scopes.PROJECT); + when(context.getViolations()).thenReturn(Collections.<Violation>emptyList()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); - decorator.decorate(resource, context); - // we must not have 8 violations ! - verify(context, times(2)).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 4.0))); - verify(context, never()).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 8.0))); + verify(context).saveMeasure(CoreMetrics.VIOLATIONS, 0.0); } @Test - public void saveZeroOnProjects() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SET); + public void shouldSaveZeroOnDirectories() { + when(resource.getScope()).thenReturn(Scopes.DIRECTORY); when(context.getViolations()).thenReturn(Collections.<Violation>emptyList()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); - verify(context, atLeast(1)).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 0.0))); + verify(context).saveMeasure(CoreMetrics.VIOLATIONS, 0.0); } @Test - public void saveZeroOnDirectories() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SPACE); - when(context.getViolations()).thenReturn(Collections.<Violation>emptyList()); + public void shouldCountViolationsBySeverity() { + when(resource.getScope()).thenReturn(Scopes.PROJECT); + when(context.getViolations()).thenReturn(createViolations()); when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); decorator.decorate(resource, context); - verify(context, atLeast(1)).saveMeasure(argThat(new IsMeasure(CoreMetrics.VIOLATIONS, 0.0))); + verify(context).saveMeasure(CoreMetrics.BLOCKER_VIOLATIONS, 0.0); + verify(context).saveMeasure(CoreMetrics.CRITICAL_VIOLATIONS, 2.0); + verify(context).saveMeasure(CoreMetrics.MAJOR_VIOLATIONS, 1.0); + verify(context).saveMeasure(CoreMetrics.MINOR_VIOLATIONS, 1.0); + verify(context).saveMeasure(CoreMetrics.INFO_VIOLATIONS, 0.0); } @Test - public void shouldCountViolationsBySeverity() { - when(resource.getScope()).thenReturn(Resource.SCOPE_SET); - when(context.getViolations()).thenReturn(createViolations()); - when(context.getChildrenMeasures((MeasuresFilter) anyObject())).thenReturn(Collections.<Measure>emptyList()); + public void shouldCountViolationsPerRule() { + List<Violation> violations = Lists.newArrayList(); + violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); + violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); + violations.add(Violation.create(ruleA2, resource).setSeverity(RulePriority.MAJOR)); + when(context.getViolations()).thenReturn(violations); decorator.decorate(resource, context); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.BLOCKER_VIOLATIONS, 0.0))); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.CRITICAL_VIOLATIONS, 2.0))); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.MAJOR_VIOLATIONS, 1.0))); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.MINOR_VIOLATIONS, 1.0))); - verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.INFO_VIOLATIONS, 0.0))); + verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.CRITICAL_VIOLATIONS, ruleA1, 2.0))); + verify(context, never()).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.MAJOR_VIOLATIONS, ruleA1, 0.0))); + verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.MAJOR_VIOLATIONS, ruleA2, 1.0))); } @Test - public void ruleViolations() { - when(context.getViolations()).thenReturn(createViolations()); + public void sameRuleShouldHaveDifferentSeverities() { + List<Violation> violations = Lists.newArrayList(); + violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); + violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.CRITICAL)); + violations.add(Violation.create(ruleA1, resource).setSeverity(RulePriority.MINOR)); + when(context.getViolations()).thenReturn(violations); decorator.decorate(resource, context); - verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.VIOLATIONS, ruleA1, RulePriority.CRITICAL, 2.0))); - verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.VIOLATIONS, ruleA2, RulePriority.MAJOR, 1.0))); - verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.VIOLATIONS, ruleB1, RulePriority.MINOR, 1.0))); + verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.CRITICAL_VIOLATIONS, ruleA1, 2.0))); + verify(context).saveMeasure(argThat(new IsRuleMeasure(CoreMetrics.MINOR_VIOLATIONS, ruleA1, 1.0))); } private List<Violation> createViolations() { diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/WeightedViolationsDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/WeightedViolationsDecoratorTest.java index 54407f80223..60048f084f7 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/WeightedViolationsDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/WeightedViolationsDecoratorTest.java @@ -19,42 +19,26 @@ */ package org.sonar.plugins.core.sensors; +import com.google.common.collect.Maps; import org.junit.Test; import org.sonar.api.batch.DecoratorContext; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Measure; import org.sonar.api.measures.MeasuresFilter; -import org.sonar.api.measures.RuleMeasure; -import org.sonar.api.resources.Resource; -import org.sonar.api.rules.Rule; +import org.sonar.api.measures.Metric; import org.sonar.api.rules.RulePriority; import org.sonar.api.test.IsMeasure; import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.Collections; import java.util.Map; import static org.mockito.Mockito.*; - public class WeightedViolationsDecoratorTest { - private List<RuleMeasure> createViolationsMeasures() { - return Arrays.asList( - // categ 3 - new RuleMeasure(CoreMetrics.VIOLATIONS, new Rule(), RulePriority.INFO, 3).setValue(40.0), - new RuleMeasure(CoreMetrics.VIOLATIONS, new Rule(), RulePriority.CRITICAL, 3).setValue(80.0), - new RuleMeasure(CoreMetrics.VIOLATIONS, new Rule(), RulePriority.BLOCKER, 3).setValue(90.0), - - // categ 4 - new RuleMeasure(CoreMetrics.VIOLATIONS, new Rule(), RulePriority.INFO, 4).setValue(10.0), - new RuleMeasure(CoreMetrics.VIOLATIONS, new Rule(), RulePriority.BLOCKER, 4).setValue(10.0) - ); - } - private Map<RulePriority, Integer> createWeights() { - Map<RulePriority, Integer> weights = new HashMap(); + Map<RulePriority, Integer> weights = Maps.newHashMap(); weights.put(RulePriority.BLOCKER, 10); weights.put(RulePriority.CRITICAL, 5); weights.put(RulePriority.MAJOR, 2); @@ -66,13 +50,13 @@ public class WeightedViolationsDecoratorTest { @Test public void weightedViolations() { Map<RulePriority, Integer> weights = createWeights(); - - WeightedViolationsDecorator decorator = new WeightedViolationsDecorator(weights); + WeightedViolationsDecorator decorator = new WeightedViolationsDecorator(); DecoratorContext context = mock(DecoratorContext.class); + when(context.getMeasure(CoreMetrics.INFO_VIOLATIONS)).thenReturn(new Measure(CoreMetrics.INFO_VIOLATIONS, 50.0)); + when(context.getMeasure(CoreMetrics.CRITICAL_VIOLATIONS)).thenReturn(new Measure(CoreMetrics.CRITICAL_VIOLATIONS, 80.0)); + when(context.getMeasure(CoreMetrics.BLOCKER_VIOLATIONS)).thenReturn(new Measure(CoreMetrics.BLOCKER_VIOLATIONS, 100.0)); - when(context.getMeasures((MeasuresFilter) anyObject())).thenReturn(createViolationsMeasures()); - - decorator.decorate(mock(Resource.class), context); + decorator.decorate(context, weights); verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.WEIGHTED_VIOLATIONS, (double) (100 * 10 + 80 * 5 + 50 * 0)))); verify(context).saveMeasure(argThat(new IsMeasure(CoreMetrics.WEIGHTED_VIOLATIONS, "INFO=50;CRITICAL=80;BLOCKER=100"))); @@ -81,15 +65,10 @@ public class WeightedViolationsDecoratorTest { @Test public void doNotSaveZero() { Map<RulePriority, Integer> weights = createWeights(); - - WeightedViolationsDecorator decorator = new WeightedViolationsDecorator(weights); + WeightedViolationsDecorator decorator = new WeightedViolationsDecorator(); DecoratorContext context = mock(DecoratorContext.class); - - when(context.getMeasures((MeasuresFilter) anyObject())).thenReturn(Arrays.asList()); - - decorator.decorate(mock(Resource.class), context); + decorator.decorate(context, weights); verify(context, never()).saveMeasure((Measure) anyObject()); } - -} +}
\ No newline at end of file diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java index 22a239811b3..9bc7b8e15b9 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java @@ -140,7 +140,7 @@ public class NewViolationsDecoratorTest { } @Test - public void priorityViolations() { + public void severityViolations() { when(context.getViolations()).thenReturn(createViolations()); decorator.decorate(resource, context); @@ -160,9 +160,9 @@ public class NewViolationsDecoratorTest { decorator.decorate(resource, context); // remember : period1 is 5daysAgo, period2 is 10daysAgo - verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule1, RulePriority.CRITICAL, 1.0, 1.0))); - verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule2, RulePriority.MAJOR, 0.0, 1.0))); - verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_VIOLATIONS, rule3, RulePriority.MINOR, 0.0, 1.0))); + verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_CRITICAL_VIOLATIONS, rule1, 1.0, 1.0))); + verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_MAJOR_VIOLATIONS, rule2, 0.0, 1.0))); + verify(context).saveMeasure(argThat(new IsVariationRuleMeasure(CoreMetrics.NEW_MINOR_VIOLATIONS, rule3, 0.0, 1.0))); } private List<Violation> createViolations() { @@ -179,14 +179,12 @@ public class NewViolationsDecoratorTest { private class IsVariationRuleMeasure extends BaseMatcher<Measure> { private Metric metric = null; private Rule rule = null; - private RulePriority priority = null; private Double var1 = null; private Double var2 = null; - public IsVariationRuleMeasure(Metric metric, Rule rule, RulePriority priority, Double var1, Double var2) { + public IsVariationRuleMeasure(Metric metric, Rule rule, Double var1, Double var2) { this.metric = metric; this.rule = rule; - this.priority = priority; this.var1 = var1; this.var2 = var2; } @@ -197,10 +195,9 @@ public class NewViolationsDecoratorTest { } RuleMeasure m = (RuleMeasure) o; return ObjectUtils.equals(metric, m.getMetric()) && - ObjectUtils.equals(rule, m.getRule()) && - ObjectUtils.equals(priority, m.getRulePriority()) && - ObjectUtils.equals(var1, m.getVariation1()) && - ObjectUtils.equals(var2, m.getVariation2()); + ObjectUtils.equals(rule, m.getRule()) && + ObjectUtils.equals(var1, m.getVariation1()) && + ObjectUtils.equals(var2, m.getVariation2()); } public void describeTo(Description arg0) { @@ -224,8 +221,9 @@ public class NewViolationsDecoratorTest { } Measure m = (Measure) o; return ObjectUtils.equals(metric, m.getMetric()) && - ObjectUtils.equals(var1, m.getVariation1()) && - ObjectUtils.equals(var2, m.getVariation2()); + ObjectUtils.equals(var1, m.getVariation1()) && + ObjectUtils.equals(var2, m.getVariation2()) && + !(m instanceof RuleMeasure); } public void describeTo(Description o) { diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java index ba963a10f0a..c5c3645f31c 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java @@ -100,12 +100,12 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase { // first past analysis when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot1)).thenReturn(Arrays.asList( - new Object[]{NCLOC_ID, null, null, null, 180.0}, - new Object[]{COVERAGE_ID, null, null, null, 75.0})); + new Object[]{NCLOC_ID, null, null, 180.0}, + new Object[]{COVERAGE_ID, null, null, 75.0})); // second past analysis when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot3)).thenReturn(Arrays.<Object[]>asList( - new Object[]{NCLOC_ID, null, null, null, 240.0})); + new Object[]{NCLOC_ID, null, null, 240.0})); // current analysis DecoratorContext context = mock(DecoratorContext.class); @@ -142,15 +142,15 @@ public class VariationDecoratorTest extends AbstractDbUnitTestCase { // first past analysis when(pastMeasuresLoader.getPastMeasures(javaPackage, pastSnapshot1)).thenReturn(Arrays.asList( - new Object[]{VIOLATIONS_ID, null, null, null, 180.0},//total - new Object[]{VIOLATIONS_ID, null, rule1.getId(), RulePriority.BLOCKER.ordinal(), 100.0},// rule 1 - new Object[]{VIOLATIONS_ID, null, rule2.getId(), RulePriority.MAJOR.ordinal(), 80.0})); // rule 2 + new Object[]{VIOLATIONS_ID, null, null, 180.0},//total + new Object[]{VIOLATIONS_ID, null, rule1.getId(), 100.0},// rule 1 + new Object[]{VIOLATIONS_ID, null, rule2.getId(), 80.0})); // rule 2 // current analysis DecoratorContext context = mock(DecoratorContext.class); Measure violations = newMeasure(VIOLATIONS, 200.0); - Measure violationsRule1 = new RuleMeasure(VIOLATIONS, rule1, RulePriority.BLOCKER, null).setValue(130.0); - Measure violationsRule2 = new RuleMeasure(VIOLATIONS, rule2, RulePriority.MAJOR, null).setValue(70.0); + Measure violationsRule1 = RuleMeasure.createForRule(VIOLATIONS, rule1, 130.0); + Measure violationsRule2 = RuleMeasure.createForRule(VIOLATIONS, rule2, 70.0); when(context.getMeasures(Matchers.<MeasuresFilter>anyObject())).thenReturn(Arrays.asList(violations, violationsRule1, violationsRule2)); VariationDecorator decorator = new VariationDecorator(pastMeasuresLoader, mock(MetricFinder.class), Arrays.asList(pastSnapshot1), false); diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties index 721ae89b67b..cbeef6f5475 100644 --- a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties @@ -595,9 +595,6 @@ drilldown.drilldown_on=Drilldown on violations_drilldown.click_for_more_on_x=Click for more on {0} : {1} violations_drilldown.col.severity=Severity violations_drilldown.col.rule=Rule -violations_drilldown.path=Path -violations_drilldown.any_severity=Any severity -violations_drilldown.any_rule=Any rule violations_drilldown.no_violations=No violations |