diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2015-10-20 15:11:16 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2015-10-21 17:40:05 +0200 |
commit | f6c9ff2f159f4e5d5468663b28e25e1d63607d8d (patch) | |
tree | 369153031a81eca6f9afde2bf0b7bf557af353b9 /sonar-core | |
parent | 5c77ac981cc2c54b252ddfe2f8f189097a69ddc5 (diff) | |
download | sonarqube-f6c9ff2f159f4e5d5468663b28e25e1d63607d8d.tar.gz sonarqube-f6c9ff2f159f4e5d5468663b28e25e1d63607d8d.zip |
SONAR-4865 Keep issue locations on existing issues
Diffstat (limited to 'sonar-core')
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(); |