]> source.dussan.org Git - sonarqube.git/commitdiff
Fix some quality flaws
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 3 May 2013 06:08:06 +0000 (08:08 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 3 May 2013 06:08:06 +0000 (08:08 +0200)
sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java
sonar-core/src/main/java/org/sonar/core/issue/FieldDiffs.java
sonar-core/src/main/java/org/sonar/core/issue/IssueChangeContext.java
sonar-core/src/main/java/org/sonar/core/issue/db/package-info.java [new file with mode: 0644]
sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java
sonar-core/src/test/java/org/sonar/core/issue/workflow/IssueWorkflowTest.java

index 595252d9839192f909f550cc6003b1eb07725250..8ebc4150672def1079f2a482b3e7681f560ca1a7 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.batch.issue;
 import org.sonar.api.BatchComponent;
 import org.sonar.api.resources.Resource;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.Severity;
 import org.sonar.api.rules.Violation;
 import org.sonar.core.issue.DefaultIssue;
 import org.sonar.core.issue.DefaultIssueBuilder;
@@ -54,7 +55,7 @@ public class DeprecatedViolations implements BatchComponent {
       .cost(violation.getCost())
       .line(violation.getLineId())
       .description(violation.getMessage())
-      .severity(violation.getSeverity() != null ? violation.getSeverity().name() : null)
+      .severity(violation.getSeverity() != null ? violation.getSeverity().name() : Severity.MAJOR)
       .build();
   }
 }
index f1ee89f083b0d4b6f04dc1413b7d4108457fbe00..3b2e0f1d055204d7eb64d188ebb4f33a8dd0a2c9 100644 (file)
@@ -23,6 +23,7 @@ import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import java.io.Serializable;
 import java.util.Date;
@@ -44,11 +45,12 @@ public class FieldDiffs implements Serializable {
     return diffs.get(field);
   }
 
+  @CheckForNull
   public String userLogin() {
     return userLogin;
   }
 
-  public FieldDiffs setUserLogin(String s) {
+  public FieldDiffs setUserLogin(@Nullable String s) {
     this.userLogin = s;
     return this;
   }
index 440fbff092c0d6966ac32f723221655399525f42..7f9118acdd5191522a318ba2b7b743e1fc58b19c 100644 (file)
@@ -53,7 +53,7 @@ public class IssueChangeContext implements Serializable {
     return new IssueChangeContext(null, date, true);
   }
 
-  public static IssueChangeContext createUser(Date date, String login) {
+  public static IssueChangeContext createUser(Date date, @Nullable String login) {
     return new IssueChangeContext(login, date, false);
   }
 }
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/package-info.java b/sonar-core/src/main/java/org/sonar/core/issue/db/package-info.java
new file mode 100644 (file)
index 0000000..9dc2053
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.core.issue.db;
+
+import javax.annotation.ParametersAreNonnullByDefault;
\ No newline at end of file
index bcf7ff20576f95b02f280782cf1995a442c190a4..862402e723885b800666f529472888df5185a5ab 100644 (file)
@@ -106,7 +106,7 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
   }
 
   public boolean doTransition(DefaultIssue issue, String transitionKey, IssueChangeContext issueChangeContext) {
-    Transition transition = machine.state(issue.status()).transition(transitionKey);
+    Transition transition = stateOf(issue).transition(transitionKey);
     if (transition != null && !transition.automatic()) {
       functionExecutor.execute(transition.functions(), issue, issueChangeContext);
       issue.setStatus(transition.to());
@@ -121,13 +121,21 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
 
 
   public void doAutomaticTransition(DefaultIssue issue, IssueChangeContext issueChangeContext) {
-    Transition transition = machine.state(issue.status()).outAutomaticTransition(issue);
+    Transition transition = stateOf(issue).outAutomaticTransition(issue);
     if (transition != null) {
       functionExecutor.execute(transition.functions(), issue, issueChangeContext);
       issue.setStatus(transition.to());
     }
   }
 
+  private State stateOf(DefaultIssue issue) {
+    State state = machine.state(issue.status());
+    if (state==null) {
+      throw new IllegalStateException("Unknown status: " + issue.status() + " [issue=" + issue.key() + "]");
+    }
+    return state;
+  }
+
   StateMachine machine() {
     return machine;
   }
index 2ee895154f9e8b521c08cf6f4ae81179abef64c2..e74f5cdac10259a570c7984ecfcee2519ec31ff1 100644 (file)
@@ -33,7 +33,7 @@ import java.util.Date;
 import java.util.List;
 
 import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
+import static org.fest.assertions.Fail.fail;
 
 public class IssueWorkflowTest {
   IssueWorkflow workflow = new IssueWorkflow(new FunctionExecutor(new IssueUpdater()));
@@ -65,6 +65,7 @@ public class IssueWorkflowTest {
     workflow.start();
 
     DefaultIssue issue = new DefaultIssue()
+      .setKey("ABCDE")
       .setResolution(Issue.RESOLUTION_FIXED)
       .setStatus(Issue.STATUS_RESOLVED)
       .setNew(false)
@@ -75,6 +76,24 @@ public class IssueWorkflowTest {
     assertThat(issue.closeDate()).isNotNull();
   }
 
+  @Test
+  public void should_fail_if_unknown_status() throws Exception {
+    workflow.start();
+
+    DefaultIssue issue = new DefaultIssue()
+      .setKey("ABCDE")
+      .setResolution(Issue.RESOLUTION_FIXED)
+      .setStatus("xxx")
+      .setNew(false)
+      .setAlive(false);
+    try {
+      workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(new Date()));
+      fail();
+    } catch (IllegalStateException e) {
+      assertThat(e).hasMessage("Unknown status: xxx [issue=ABCDE]");
+    }
+
+  }
 
   private Collection<String> keys(List<Transition> transitions) {
     return Collections2.transform(transitions, new Function<Transition, String>() {