From 84589fecd99956f0e351c862e38baf915ace06ce Mon Sep 17 00:00:00 2001 From: Michal Duda Date: Mon, 18 Feb 2019 17:52:18 +0100 Subject: [PATCH] SONAR-11729 implemented PrDecorator for Bitbucket Server --- .../changeevent/QGChangeEventListener.java | 12 +++++++- .../QGChangeEventListenersImpl.java | 10 ++++++- .../QGChangeEventListenersImplTest.java | 28 ++++++++++++++++++- .../resources/org/sonar/l10n/core.properties | 2 +- .../org/sonar/api/measures/CoreMetrics.java | 2 +- 5 files changed, 49 insertions(+), 5 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListener.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListener.java index 7af703f9a8b..a2d55a04a4a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListener.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListener.java @@ -19,6 +19,7 @@ */ package org.sonar.server.qualitygate.changeevent; +import java.util.EnumSet; import java.util.Set; import org.sonar.api.rules.RuleType; import org.sonar.api.server.ServerSide; @@ -34,11 +35,18 @@ public interface QGChangeEventListener { void onIssueChanges(QGChangeEvent qualityGateEvent, Set changedIssues); interface ChangedIssue { + String getKey(); Status getStatus(); RuleType getType(); + + String getSeverity(); + + default boolean isNotClosed() { + return !Status.CLOSED_STATUSES.contains(getStatus()); + } } enum Status { @@ -47,7 +55,9 @@ public interface QGChangeEventListener { REOPENED, RESOLVED_FP, RESOLVED_WF, - RESOLVED_FIXED + RESOLVED_FIXED; + + protected static final Set CLOSED_STATUSES = EnumSet.of(CONFIRMED, RESOLVED_FIXED, RESOLVED_FP, RESOLVED_WF); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImpl.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImpl.java index d8241a54e69..bb8bea4b7ed 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImpl.java @@ -101,11 +101,13 @@ public class QGChangeEventListenersImpl implements QGChangeEventListeners { private final String key; private final QGChangeEventListener.Status status; private final RuleType type; + private final String severity; - private ChangedIssueImpl(DefaultIssue issue) { + ChangedIssueImpl(DefaultIssue issue) { this.key = issue.key(); this.status = statusOf(issue); this.type = issue.type(); + this.severity = issue.severity(); } static QGChangeEventListener.Status statusOf(DefaultIssue issue) { @@ -153,12 +155,18 @@ public class QGChangeEventListenersImpl implements QGChangeEventListeners { return type; } + @Override + public String getSeverity() { + return severity; + } + @Override public String toString() { return "ChangedIssueImpl{" + "key='" + key + '\'' + ", status=" + status + ", type=" + type + + ", severity=" + severity + '}'; } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImplTest.java index d9905083819..73ca7f593f9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImplTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/changeevent/QGChangeEventListenersImplTest.java @@ -227,6 +227,32 @@ public class QGChangeEventListenersImplTest { verifyNoMoreInteractions(listener1, listener2, listener3); } + @Test + public void isNotClosed_returns_true_if_issue_in_one_of_opened_states() { + DefaultIssue defaultIssue = new DefaultIssue(); + defaultIssue.setStatus(Issue.STATUS_REOPENED); + defaultIssue.setKey("abc"); + defaultIssue.setType(RuleType.BUG); + defaultIssue.setSeverity("BLOCKER"); + + ChangedIssue changedIssue = new ChangedIssueImpl(defaultIssue); + + assertThat(changedIssue.isNotClosed()).isTrue(); + } + + @Test + public void isNotClosed_returns_false_if_issue_in_one_of_closed_states() { + DefaultIssue defaultIssue = new DefaultIssue(); + defaultIssue.setStatus(Issue.STATUS_CONFIRMED); + defaultIssue.setKey("abc"); + defaultIssue.setType(RuleType.BUG); + defaultIssue.setSeverity("BLOCKER"); + + ChangedIssue changedIssue = new ChangedIssueImpl(defaultIssue); + + assertThat(changedIssue.isNotClosed()).isFalse(); + } + @Test public void test_status_mapping() { assertThat(ChangedIssueImpl.statusOf(new DefaultIssue().setStatus(Issue.STATUS_OPEN))).isEqualTo(QGChangeEventListener.Status.OPEN); @@ -267,7 +293,7 @@ public class QGChangeEventListenersImplTest { .toArray(Tuple[]::new); assertThat(changedIssues) .hasSize(issues.length) - .extracting(ChangedIssue::getKey, t -> t.getStatus(), ChangedIssue::getType) + .extracting(ChangedIssue::getKey, ChangedIssue::getStatus, ChangedIssue::getType) .containsOnly(expected); } diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index fcf8332f228..6759d6c8aff 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -1808,7 +1808,7 @@ metric.new_duplicated_lines.name=Duplicated Lines on New Code metric.new_duplicated_lines.extra_short_name=Duplicated Lines metric.new_duplicated_lines.description=Duplicated Lines on New Code metric.new_duplicated_lines_density.description=Duplicated lines on new code balanced by statements -metric.new_duplicated_lines_density.name=Duplicated Lines on New Code (%) +metric.new_duplicated_lines_density.name=Duplicated Lines on New Code metric.new_duplicated_lines_density.short_name=Duplications metric.new_duplicated_lines_density.extra_short_name=Density metric.new_info_violations.description=New Info issues diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java index a8d6b9c34f6..0d6349bc8f8 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java @@ -751,7 +751,7 @@ public final class CoreMetrics { /** * @since 6.1 */ - public static final Metric NEW_DUPLICATED_LINES_DENSITY = new Metric.Builder(NEW_DUPLICATED_LINES_DENSITY_KEY, "Duplicated Lines on New Code (%)", + public static final Metric NEW_DUPLICATED_LINES_DENSITY = new Metric.Builder(NEW_DUPLICATED_LINES_DENSITY_KEY, "Duplicated Lines on New Code", Metric.ValueType.PERCENT) .setDescription("Duplicated lines on new code balanced by statements") .setDirection(Metric.DIRECTION_WORST) -- 2.39.5