aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-core
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2015-10-20 15:11:16 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2015-10-21 17:40:05 +0200
commitf6c9ff2f159f4e5d5468663b28e25e1d63607d8d (patch)
tree369153031a81eca6f9afde2bf0b7bf557af353b9 /sonar-core
parent5c77ac981cc2c54b252ddfe2f8f189097a69ddc5 (diff)
downloadsonarqube-f6c9ff2f159f4e5d5468663b28e25e1d63607d8d.tar.gz
sonarqube-f6c9ff2f159f4e5d5468663b28e25e1d63607d8d.zip
SONAR-4865 Keep issue locations on existing issues
Diffstat (limited to 'sonar-core')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java30
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java17
-rw-r--r--sonar-core/src/test/java/org/sonar/core/issue/IssueUpdaterTest.java32
3 files changed, 65 insertions, 14 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java
index 46ac2fbad12..f9a4f4da016 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java
@@ -26,18 +26,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
@@ -49,6 +37,20 @@ import org.sonar.api.rule.Severity;
import org.sonar.api.utils.Duration;
import org.sonar.core.issue.tracking.Trackable;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import static java.lang.String.format;
public class DefaultIssue implements Issue, Trackable, org.sonar.api.ce.measure.Issue {
@@ -553,12 +555,14 @@ public class DefaultIssue implements Issue, Trackable, org.sonar.api.ce.measure.
return this;
}
+ @CheckForNull
public <T> T getLocations() {
return (T)locations;
}
- public void setLocations(Object locations) {
+ public DefaultIssue setLocations(@Nullable Object locations) {
this.locations = locations;
+ return this;
}
@Override
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java b/sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java
index 851523cb5be..a7d0edb1803 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java
@@ -123,6 +123,22 @@ public class IssueUpdater {
return setLine(issue, currentLine);
}
+ public boolean setLocations(DefaultIssue issue, @Nullable Object locations) {
+ if (!Objects.equal(locations, issue.getLocations())) {
+ issue.setLocations(locations);
+ issue.setChanged(true);
+ return true;
+ }
+ return false;
+ }
+
+ public boolean setPastLocations(DefaultIssue issue, @Nullable Object previousLocations) {
+ Object currentLocations = issue.getLocations();
+ issue.setLocations(previousLocations);
+ return setLocations(issue, currentLocations);
+
+ }
+
public boolean setResolution(DefaultIssue issue, @Nullable String resolution, IssueChangeContext context) {
if (!Objects.equal(resolution, issue.resolution())) {
issue.setFieldChange(context, RESOLUTION, issue.resolution(), resolution);
@@ -302,4 +318,5 @@ public class IssueUpdater {
return false;
}
+
}
diff --git a/sonar-core/src/test/java/org/sonar/core/issue/IssueUpdaterTest.java b/sonar-core/src/test/java/org/sonar/core/issue/IssueUpdaterTest.java
index ab5954ac145..86f103885c0 100644
--- a/sonar-core/src/test/java/org/sonar/core/issue/IssueUpdaterTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/issue/IssueUpdaterTest.java
@@ -202,7 +202,7 @@ public class IssueUpdaterTest {
}
@Test
- public void not_change_line() {
+ public void line_is_not_changed() {
issue.setLine(123);
boolean updated = updater.setLine(issue, 123);
assertThat(updated).isFalse();
@@ -212,6 +212,36 @@ public class IssueUpdaterTest {
}
@Test
+ public void change_locations() {
+ issue.setLocations("[1-3]");
+ boolean updated = updater.setLocations(issue, "[1-4]");
+ assertThat(updated).isTrue();
+ assertThat(issue.getLocations()).isEqualTo("[1-4]");
+ assertThat(issue.currentChange()).isNull();
+ assertThat(issue.mustSendNotifications()).isFalse();
+ }
+
+ @Test
+ public void do_not_change_locations() {
+ issue.setLocations("[1-3]");
+ boolean updated = updater.setLocations(issue, "[1-3]");
+ assertThat(updated).isFalse();
+ assertThat(issue.getLocations()).isEqualTo("[1-3]");
+ assertThat(issue.currentChange()).isNull();
+ assertThat(issue.mustSendNotifications()).isFalse();
+ }
+
+ @Test
+ public void set_locations_for_the_first_time() {
+ issue.setLocations(null);
+ boolean updated = updater.setLocations(issue, "[1-4]");
+ assertThat(updated).isTrue();
+ assertThat(issue.getLocations()).isEqualTo("[1-4]");
+ assertThat(issue.currentChange()).isNull();
+ assertThat(issue.mustSendNotifications()).isFalse();
+ }
+
+ @Test
public void set_resolution() {
boolean updated = updater.setResolution(issue, "OPEN", context);
assertThat(updated).isTrue();