]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 Add status when creating new Issues
authorJulien Lancelot <julien.lancelot@gmail.com>
Fri, 12 Apr 2013 10:03:59 +0000 (12:03 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Fri, 12 Apr 2013 10:03:59 +0000 (12:03 +0200)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java
sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java

index 778c020b5530fd60b3c9851b83b3216308668da8..8dc5e2bb63bfba5f7ee81103c275ddabd9a0a1e0 100644 (file)
@@ -93,7 +93,8 @@ public class IssueTrackingDecorator implements Decorator {
 
     // Load new issues
     Issuable issuable = perspectives.as(Issuable.class, resource);
-    List<DefaultIssue> newIssues = prepareNewIssues(toDefaultIssues(issuable.issues()), source);
+    List<DefaultIssue> newIssues = toDefaultIssues(issuable.issues());
+    setChecksumOnNewIssues(newIssues, source);
 
     // Load existing issues
     Collection<IssueDto> referenceIssues = loadExistingOpenIssues(resource);
@@ -102,14 +103,11 @@ public class IssueTrackingDecorator implements Decorator {
     mapIssues(newIssues, referenceIssues, source, resource);
   }
 
-  private List<DefaultIssue> prepareNewIssues(List<DefaultIssue> issues, String source) {
-    List<DefaultIssue> result = newArrayList();
+  private void setChecksumOnNewIssues(List<DefaultIssue> issues, String source) {
     List<String> checksums = SourceChecksum.lineChecksumsOfFile(source);
     for (DefaultIssue issue : issues) {
       issue.setChecksum(SourceChecksum.getChecksumForLine(checksums, issue.line()));
-      result.add(issue);
     }
-    return result;
   }
 
   private Collection<IssueDto> loadExistingOpenIssues(Resource resource) {
@@ -129,27 +127,7 @@ public class IssueTrackingDecorator implements Decorator {
 
     if (lastIssues != null) {
       hasLastScan = true;
-      unmappedLastIssues.addAll(lastIssues);
-
-      for (IssueDto lastIssue : lastIssues) {
-        lastIssuesByRule.put(getRule(lastIssue), lastIssue);
-      }
-
-      // Match the key of the issue. (For manual issues)
-      for (DefaultIssue newIssue : newIssues) {
-        mapIssue(newIssue,
-            findLastIssueWithSameKey(newIssue, lastIssuesByRule.get(getRule(newIssue))),
-            lastIssuesByRule, referenceIssuesMap);
-      }
-
-      // Try first to match issues on same rule with same line and with same checksum (but not necessarily with same message)
-      for (DefaultIssue newIssue : newIssues) {
-        if (isNotAlreadyMapped(newIssue)) {
-          mapIssue(newIssue,
-              findLastIssueWithSameLineAndChecksum(newIssue, lastIssuesByRule.get(getRule(newIssue))),
-              lastIssuesByRule, referenceIssuesMap);
-        }
-      }
+      mapLastIssues(newIssues, lastIssues, lastIssuesByRule);
     }
 
     // If each new issue matches an old one we can stop the matching mechanism
@@ -255,6 +233,30 @@ public class IssueTrackingDecorator implements Decorator {
     return referenceIssuesMap;
   }
 
+  private void mapLastIssues(List<DefaultIssue> newIssues, @Nullable Collection<IssueDto> lastIssues, Multimap<Integer, IssueDto> lastIssuesByRule) {
+    unmappedLastIssues.addAll(lastIssues);
+
+    for (IssueDto lastIssue : lastIssues) {
+      lastIssuesByRule.put(getRule(lastIssue), lastIssue);
+    }
+
+    // Match the key of the issue. (For manual issues)
+    for (DefaultIssue newIssue : newIssues) {
+      mapIssue(newIssue,
+          findLastIssueWithSameKey(newIssue, lastIssuesByRule.get(getRule(newIssue))),
+          lastIssuesByRule, referenceIssuesMap);
+    }
+
+    // Try first to match issues on same rule with same line and with same checksum (but not necessarily with same message)
+    for (DefaultIssue newIssue : newIssues) {
+      if (isNotAlreadyMapped(newIssue)) {
+        mapIssue(newIssue,
+            findLastIssueWithSameLineAndChecksum(newIssue, lastIssuesByRule.get(getRule(newIssue))),
+            lastIssuesByRule, referenceIssuesMap);
+      }
+    }
+  }
+
   @VisibleForTesting
   IssueDto getReferenceIssue(DefaultIssue issue) {
     return referenceIssuesMap.get(issue);
@@ -382,6 +384,7 @@ public class IssueTrackingDecorator implements Decorator {
   private void mapIssue(DefaultIssue newIssue, IssueDto pastIssue, Multimap<Integer, IssueDto> lastIssuesByRule, Map<DefaultIssue, IssueDto> issueMap) {
     if (pastIssue != null) {
       newIssue.setCreatedAt(pastIssue.getCreatedAt());
+      newIssue.setUpdatedAt(project.getAnalysisDate());
       newIssue.setKey(pastIssue.getUuid());
       // TODO
 //      newIssue.setPersonId(pastIssue.getPersonId());
index b803e6dc327c514d7ba60c31a62d3211e3cfff9d..9841207f8c4d46baf43564a9ee9a5d3d5ae03f4d 100644 (file)
@@ -48,21 +48,20 @@ public class DeprecatedViolations implements BatchComponent {
   }
 
   Issue toIssue(Violation violation) {
-    DefaultIssue issue = new DefaultIssue();
-    issue.setComponentKey(violation.getResource().getEffectiveKey());
-    issue.setKey(UUID.randomUUID().toString());
-    issue.setRuleRepositoryKey(violation.getRule().getRepositoryKey());
-    issue.setRuleKey(violation.getRule().getKey());
-    issue.setCost(violation.getCost());
-    issue.setChecksum(violation.getChecksum());
-    issue.setCreatedAt(violation.getCreatedAt());
-    // FIXME
-    //issue.setPerson(violation.getPersonId());
-    issue.setLine(violation.getLineId());
-    issue.setMessage(violation.getMessage());
+    DefaultIssue issue = new DefaultIssue()
+        .setComponentKey(violation.getResource().getEffectiveKey())
+        .setKey(UUID.randomUUID().toString())
+        .setRuleRepositoryKey(violation.getRule().getRepositoryKey())
+        .setRuleKey(violation.getRule().getKey())
+        .setCost(violation.getCost())
+        .setLine(violation.getLineId())
+        .setMessage(violation.getMessage())
+        .setStatus(Issue.STATUS_OPEN);
     if (violation.getSeverity() != null) {
       issue.setSeverity(violation.getSeverity().name());
     }
+    // FIXME
+    //issue.setPerson(violation.getPersonId());
     return issue;
   }
 }