summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2011-11-24 17:15:31 +0100
committerSimon Brandhof <simon.brandhof@gmail.com>2011-11-24 17:18:30 +0100
commit36f47f4b53f8a5b8befecf89ce6e10c977ba874c (patch)
tree85cfcc52d4fc386f477a2f82f723fcc079002609 /plugins
parent47140a13d3cc91f8b71426cb767dc382f9a3ef9e (diff)
downloadsonarqube-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')
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/ViolationsDecorator.java132
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/WeightedViolationsDecorator.java68
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java113
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/VariationDecorator.java12
-rw-r--r--plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/hotspot_most_violated_rules.html.erb4
-rw-r--r--plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/rules.html.erb12
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/ViolationsDecoratorTest.java76
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/WeightedViolationsDecoratorTest.java45
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/NewViolationsDecoratorTest.java24
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/VariationDecoratorTest.java16
-rw-r--r--plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties3
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> &nbsp;<%= link_to message('blocker'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'BLOCKER'} %></td>
+ <td> &nbsp;<%= 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> &nbsp;<%= link_to message('critical'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'CRITICAL'} %></td>
+ <td> &nbsp;<%= 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> &nbsp;<%= link_to message('major'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'MAJOR'} %></td>
+ <td> &nbsp;<%= 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> &nbsp;<%= link_to message('minor'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'MINOR'} %></td>
+ <td> &nbsp;<%= 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> &nbsp;<%= link_to message('info'), {:controller => 'drilldown', :action => 'violations', :id => @project.key, :priority => 'INFO'} %></td>
+ <td> &nbsp;<%= 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