diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-04-12 12:03:59 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-04-12 12:03:59 +0200 |
commit | 19a8496f9cfa0aa861a09fbf6e4fded5cd6b80f4 (patch) | |
tree | 39d0302b23ae7d978e7e9599e0d505ad62d0748a | |
parent | 33de62493fea3eb7517944ce50b760baba9be2cf (diff) | |
download | sonarqube-19a8496f9cfa0aa861a09fbf6e4fded5cd6b80f4.tar.gz sonarqube-19a8496f9cfa0aa861a09fbf6e4fded5cd6b80f4.zip |
SONAR-3755 Add status when creating new Issues
-rw-r--r-- | plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java | 55 | ||||
-rw-r--r-- | sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java | 23 |
2 files changed, 40 insertions, 38 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java index 778c020b553..8dc5e2bb63b 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/issue/IssueTrackingDecorator.java @@ -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()); diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java b/sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java index b803e6dc327..9841207f8c4 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java +++ b/sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java @@ -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; } } |