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:01:31 +0200
commit39b12fd92494a00fd1f6995960357bf43acd1144 (patch)
tree801855f6182cc7c54d6e4d06ade0004f3d8fd280
parent2f325440c87dfb8a5abc327d563c8b0d70e641d8 (diff)
downloadsonarqube-39b12fd92494a00fd1f6995960357bf43acd1144.tar.gz
sonarqube-39b12fd92494a00fd1f6995960357bf43acd1144.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");