aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/main/java/org/sonar/batch
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-09-18 16:11:11 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-09-18 16:11:37 +0200
commit66041bc94f8c7c8e0a2ab0aafe3895e3b1b98df1 (patch)
tree4a6506e9d476515f568d117b61b419178d10d5f0 /sonar-batch/src/main/java/org/sonar/batch
parenta4479336b9c54c651b95c055d3020098c2e49a3e (diff)
downloadsonarqube-66041bc94f8c7c8e0a2ab0aafe3895e3b1b98df1.tar.gz
sonarqube-66041bc94f8c7c8e0a2ab0aafe3895e3b1b98df1.zip
SONAR-4689 Batch API to get issues of the current module
Diffstat (limited to 'sonar-batch/src/main/java/org/sonar/batch')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java10
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/DefaultModuleIssues.java (renamed from sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssues.java)34
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/IssuableFactory.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java6
5 files changed, 47 insertions, 19 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
index caa4a98b0b2..ca8cf60059c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultIndex.java
@@ -49,7 +49,7 @@ import org.sonar.batch.DefaultResourceCreationLock;
import org.sonar.batch.ProjectTree;
import org.sonar.batch.ResourceFilters;
import org.sonar.batch.issue.DeprecatedViolations;
-import org.sonar.batch.issue.ScanIssues;
+import org.sonar.batch.issue.DefaultModuleIssues;
import org.sonar.core.component.ComponentKeys;
import org.sonar.core.component.ScanGraph;
@@ -82,7 +82,7 @@ public class DefaultIndex extends SonarIndex {
private Map<Resource, Map<Resource, Dependency>> incomingDependenciesByResource = Maps.newHashMap();
private ProjectTree projectTree;
private final DeprecatedViolations deprecatedViolations;
- private ScanIssues scanIssues;
+ private DefaultModuleIssues moduleIssues;
public DefaultIndex(PersistenceManager persistence, DefaultResourceCreationLock lock, ProjectTree projectTree, MetricFinder metricFinder,
ScanGraph graph, DeprecatedViolations deprecatedViolations) {
@@ -124,12 +124,12 @@ public class DefaultIndex extends SonarIndex {
return currentProject;
}
- public void setCurrentProject(Project project, ResourceFilters resourceFilters, ScanIssues scanIssues) {
+ public void setCurrentProject(Project project, ResourceFilters resourceFilters, DefaultModuleIssues moduleIssues) {
this.currentProject = project;
// the following components depend on the current module, so they need to be reloaded.
this.resourceFilters = resourceFilters;
- this.scanIssues = scanIssues;
+ this.moduleIssues = moduleIssues;
}
/**
@@ -378,7 +378,7 @@ public class DefaultIndex extends SonarIndex {
violation.setSeverity(null);
violation.setResource(bucket.getResource());
- scanIssues.initAndAddViolation(violation);
+ moduleIssues.initAndAddViolation(violation);
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java b/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java
index 0be18b5dff9..5b7c4c8092c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java
@@ -33,13 +33,13 @@ import java.util.List;
*/
public class DefaultIssuable implements Issuable {
- private final ScanIssues scanIssues;
+ private final DefaultModuleIssues moduleIssues;
private final IssueCache cache;
private final Component component;
- DefaultIssuable(Component component, ScanIssues scanIssues, IssueCache cache) {
+ DefaultIssuable(Component component, DefaultModuleIssues moduleIssues, IssueCache cache) {
this.component = component;
- this.scanIssues = scanIssues;
+ this.moduleIssues = moduleIssues;
this.cache = cache;
}
@@ -50,7 +50,7 @@ public class DefaultIssuable implements Issuable {
@Override
public boolean addIssue(Issue issue) {
- return scanIssues.initAndAddIssue((DefaultIssue) issue);
+ return moduleIssues.initAndAddIssue((DefaultIssue) issue);
}
@SuppressWarnings("unchecked")
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssues.java b/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultModuleIssues.java
index a3b53260897..cdd9f22223a 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssues.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/issue/DefaultModuleIssues.java
@@ -19,7 +19,10 @@
*/
package org.sonar.batch.issue;
-import org.sonar.api.BatchComponent;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import org.sonar.api.issue.Issue;
+import org.sonar.api.issue.ModuleIssues;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.profiles.RulesProfile;
import org.sonar.api.resources.Project;
@@ -33,14 +36,14 @@ import javax.annotation.Nullable;
/**
* Initialize the issues raised during scan.
*/
-public class ScanIssues implements BatchComponent {
+public class DefaultModuleIssues implements ModuleIssues {
private final RulesProfile qProfile;
private final IssueCache cache;
private final Project project;
private final IssueFilters filters;
- public ScanIssues(RulesProfile qProfile, IssueCache cache, Project project, IssueFilters filters) {
+ public DefaultModuleIssues(RulesProfile qProfile, IssueCache cache, Project project, IssueFilters filters) {
this.qProfile = qProfile;
this.cache = cache;
this.project = project;
@@ -88,4 +91,29 @@ public class ScanIssues implements BatchComponent {
return false;
}
+ @Override
+ public Iterable<Issue> issues() {
+ return (Iterable) Iterables.filter(cache.all(), new ModulePredicate(false));
+ }
+
+ @Override
+ public Iterable<Issue> resolvedIssues() {
+ return (Iterable) Iterables.filter(cache.all(), new ModulePredicate(true));
+ }
+
+ private class ModulePredicate implements Predicate<DefaultIssue> {
+ private final boolean resolved;
+
+ private ModulePredicate(boolean resolved) {
+ this.resolved = resolved;
+ }
+
+ @Override
+ public boolean apply(@Nullable DefaultIssue issue) {
+ if (issue != null && (issue.componentKey().equals(project.getEffectiveKey()) || issue.componentKey().startsWith(project.getEffectiveKey() + ":"))) {
+ return resolved ? issue.resolution() != null : issue.resolution()==null;
+ }
+ return false;
+ }
+ }
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/IssuableFactory.java b/sonar-batch/src/main/java/org/sonar/batch/issue/IssuableFactory.java
index 3e13158a761..cd34582c24c 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/IssuableFactory.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/issue/IssuableFactory.java
@@ -33,12 +33,12 @@ import javax.annotation.CheckForNull;
*/
public class IssuableFactory extends PerspectiveBuilder<Issuable> {
- private final ScanIssues scanIssues;
+ private final DefaultModuleIssues moduleIssues;
private final IssueCache cache;
- public IssuableFactory(ScanIssues scanIssues, IssueCache cache) {
+ public IssuableFactory(DefaultModuleIssues moduleIssues, IssueCache cache) {
super(Issuable.class);
- this.scanIssues = scanIssues;
+ this.moduleIssues = moduleIssues;
this.cache = cache;
}
@@ -49,6 +49,6 @@ public class IssuableFactory extends PerspectiveBuilder<Issuable> {
if (component instanceof ResourceComponent) {
supported = Scopes.isHigherThanOrEquals(((ResourceComponent) component).scope(), Scopes.FILE);
}
- return supported ? new DefaultIssuable(component, scanIssues, cache) : null;
+ return supported ? new DefaultIssuable(component, moduleIssues, cache) : null;
}
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
index 0075238fd4e..543f01e2940 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
@@ -42,7 +42,7 @@ import org.sonar.batch.index.DefaultIndex;
import org.sonar.batch.index.ResourcePersister;
import org.sonar.batch.issue.IssuableFactory;
import org.sonar.batch.issue.IssueFilters;
-import org.sonar.batch.issue.ScanIssues;
+import org.sonar.batch.issue.DefaultModuleIssues;
import org.sonar.batch.phases.PhaseExecutor;
import org.sonar.batch.phases.PhasesTimeProfiler;
import org.sonar.batch.scan.filesystem.*;
@@ -113,7 +113,7 @@ public class ModuleScanContainer extends ComponentContainer {
new ProfileProvider(),
// issues
- ScanIssues.class,
+ DefaultModuleIssues.class,
IssuableFactory.class,
ScanPerspectives.class
@@ -140,7 +140,7 @@ public class ModuleScanContainer extends ComponentContainer {
DefaultIndex index = getComponentByType(DefaultIndex.class);
index.setCurrentProject(module,
getComponentByType(ResourceFilters.class),
- getComponentByType(ScanIssues.class));
+ getComponentByType(DefaultModuleIssues.class));
getComponentByType(PhaseExecutor.class).execute(module);
}