From 19a8496f9cfa0aa861a09fbf6e4fded5cd6b80f4 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 12 Apr 2013 12:03:59 +0200 Subject: [PATCH] SONAR-3755 Add status when creating new Issues --- .../core/issue/IssueTrackingDecorator.java | 55 ++++++++++--------- .../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 newIssues = prepareNewIssues(toDefaultIssues(issuable.issues()), source); + List newIssues = toDefaultIssues(issuable.issues()); + setChecksumOnNewIssues(newIssues, source); // Load existing issues Collection referenceIssues = loadExistingOpenIssues(resource); @@ -102,14 +103,11 @@ public class IssueTrackingDecorator implements Decorator { mapIssues(newIssues, referenceIssues, source, resource); } - private List prepareNewIssues(List issues, String source) { - List result = newArrayList(); + private void setChecksumOnNewIssues(List issues, String source) { List checksums = SourceChecksum.lineChecksumsOfFile(source); for (DefaultIssue issue : issues) { issue.setChecksum(SourceChecksum.getChecksumForLine(checksums, issue.line())); - result.add(issue); } - return result; } private Collection 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 newIssues, @Nullable Collection lastIssues, Multimap 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 lastIssuesByRule, Map 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; } } -- 2.39.5