diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2013-09-18 16:11:11 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2013-09-18 16:11:37 +0200 |
commit | 66041bc94f8c7c8e0a2ab0aafe3895e3b1b98df1 (patch) | |
tree | 4a6506e9d476515f568d117b61b419178d10d5f0 /sonar-batch/src/main/java/org/sonar/batch | |
parent | a4479336b9c54c651b95c055d3020098c2e49a3e (diff) | |
download | sonarqube-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.java | 10 | ||||
-rw-r--r-- | sonar-batch/src/main/java/org/sonar/batch/issue/DefaultIssuable.java | 8 | ||||
-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.java | 8 | ||||
-rw-r--r-- | sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java | 6 |
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); } |