aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2011-09-20 11:00:48 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2011-09-20 11:00:48 +0200
commit8e6de3bf5745eff093ee71f58232a0557a3ad1c3 (patch)
tree7daade5f55759a3fd245902af4af6df45d7fca3c
parent2953b754d25118a9e065683c39faa4e5dc1dcca0 (diff)
downloadsonarqube-8e6de3bf5745eff093ee71f58232a0557a3ad1c3.tar.gz
sonarqube-8e6de3bf5745eff093ee71f58232a0557a3ad1c3.zip
SONAR-2812 The creation date of violation should not be reinitialized when the hash of the line hasn't been changed
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecorator.java19
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecoratorTest.java12
2 files changed, 31 insertions, 0 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecorator.java
index 81e93fe6f1b..67ca1ec63c5 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecorator.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecorator.java
@@ -116,6 +116,16 @@ public class ViolationTrackingDecorator implements Decorator {
pastViolationsByRule, referenceViolationsMap);
}
}
+
+ // Last check: match violation if same rule and same checksum but different line and different message
+ // See https://jira.codehaus.org/browse/SONAR-2812
+ for (Violation newViolation : newViolations) {
+ if (isNotAlreadyMapped(newViolation, referenceViolationsMap)) {
+ mapViolation(newViolation,
+ findPastViolationWithSameChecksum(newViolation, pastViolationsByRule.get(newViolation.getRule().getId())),
+ pastViolationsByRule, referenceViolationsMap);
+ }
+ }
}
return referenceViolationsMap;
}
@@ -124,6 +134,15 @@ public class ViolationTrackingDecorator implements Decorator {
return !violationMap.containsKey(newViolation);
}
+ private RuleFailureModel findPastViolationWithSameChecksum(Violation newViolation, Collection<RuleFailureModel> pastViolations) {
+ for (RuleFailureModel pastViolation : pastViolations) {
+ if (isSameChecksum(newViolation, pastViolation)) {
+ return pastViolation;
+ }
+ }
+ return null;
+ }
+
private RuleFailureModel findPastViolationWithSameLineAndMessage(Violation newViolation, Collection<RuleFailureModel> pastViolations) {
for (RuleFailureModel pastViolation : pastViolations) {
if (isSameLine(newViolation, pastViolation) && isSameMessage(newViolation, pastViolation)) {
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecoratorTest.java
index ba798f14b24..1da2991ece6 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecoratorTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/ViolationTrackingDecoratorTest.java
@@ -102,6 +102,18 @@ public class ViolationTrackingDecoratorTest {
assertThat(mapping.get(newViolation), equalTo(referenceViolation));
}
+ /**
+ * See https://jira.codehaus.org/browse/SONAR-2812
+ */
+ @Test
+ public void sameChecksumAndRuleButDifferentLineAndDifferentMessage() {
+ Violation newViolation = newViolation("new message", 1, 50, "checksum1");
+ RuleFailureModel referenceViolation = newReferenceViolation("old message", 2, 50, "checksum1");
+
+ Map<Violation, RuleFailureModel> mapping = decorator.mapViolations(Lists.newArrayList(newViolation), Lists.newArrayList(referenceViolation));
+ assertThat(mapping.get(newViolation), equalTo(referenceViolation));
+ }
+
@Test
public void shouldCreateNewViolationWhenSameRuleSameMessageButDifferentLineAndChecksum() {
Violation newViolation = newViolation("message", 1, 50, "checksum1");