summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@gmail.com>2013-04-12 12:03:59 +0200
committerJulien Lancelot <julien.lancelot@gmail.com>2013-04-12 12:03:59 +0200
commit19a8496f9cfa0aa861a09fbf6e4fded5cd6b80f4 (patch)
tree39d0302b23ae7d978e7e9599e0d505ad62d0748a
parent33de62493fea3eb7517944ce50b760baba9be2cf (diff)
downloadsonarqube-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.java55
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedViolations.java23
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;
}
}