Browse Source

SONAR-5389 Rename Analyzer -> Sensor

tags/4.5-RC1
Julien HENRY 10 years ago
parent
commit
1b642da788
48 changed files with 370 additions and 349 deletions
  1. 10
    11
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchExtensionDictionnary.java
  2. 9
    8
      sonar-batch/src/main/java/org/sonar/batch/mediumtest/AnalyzerMediumTester.java
  3. 1
    3
      sonar-batch/src/main/java/org/sonar/batch/phases/SensorMatcher.java
  4. 1
    1
      sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
  5. 27
    30
      sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java
  6. 10
    12
      sonar-batch/src/main/java/org/sonar/batch/scan/SensorWrapper.java
  7. 5
    4
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalysisPublisher.java
  8. 7
    6
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerIssueCache.java
  9. 9
    8
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerMeasureCache.java
  10. 5
    4
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerOptimizer.java
  11. 9
    8
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzersExecutor.java
  12. 28
    27
      sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultAnalyzerContext.java
  13. 5
    4
      sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultFileLinesContext.java
  14. 4
    3
      sonar-batch/src/main/java/org/sonar/batch/scan2/ModuleScanExecutor.java
  15. 5
    4
      sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchExtensionDictionnaryTest.java
  16. 3
    2
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
  17. 5
    4
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
  18. 4
    4
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/XooPlugin.java
  19. 13
    12
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/MeasureSensor.java
  20. 9
    8
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/ScmActivitySensor.java
  21. 10
    9
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/rule/OneIssuePerLineAnalyzer.java
  22. 14
    15
      sonar-batch/src/test/java/org/sonar/batch/scan/SensorContextAdapterTest.java
  23. 7
    7
      sonar-batch/src/test/java/org/sonar/batch/scan2/AnalyzerOptimizerTest.java
  24. 9
    8
      sonar-deprecated/src/main/java/org/sonar/api/batch/BatchExtensionDictionnary.java
  25. 2
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java
  26. 1
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/SensorContext.java
  27. 0
    21
      sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/internal/package-info.java
  28. 5
    5
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/Sensor.java
  29. 17
    16
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java
  30. 15
    15
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorDescriptor.java
  31. 10
    9
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptor.java
  32. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/package-info.java
  33. 5
    4
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java
  34. 10
    10
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java
  35. 6
    5
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java
  36. 14
    13
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java
  37. 21
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/package-info.java
  38. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/package-info.java
  39. 5
    4
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java
  40. 8
    8
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java
  41. 6
    5
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java
  42. 10
    9
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java
  43. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/package-info.java
  44. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/package-info.java
  45. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/package-info.java
  46. 5
    4
      sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptorTest.java
  47. 8
    7
      sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java
  48. 8
    7
      sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java

+ 10
- 11
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchExtensionDictionnary.java View File

@@ -22,9 +22,8 @@ package org.sonar.batch.bootstrap;
import com.google.common.collect.Lists;
import org.apache.commons.lang.ClassUtils;
import org.sonar.api.batch.CheckProject;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.resources.Project;
import org.sonar.batch.scan.SensorWrapper;
@@ -40,10 +39,10 @@ import java.util.List;
*/
public class BatchExtensionDictionnary extends org.sonar.api.batch.BatchExtensionDictionnary {

private AnalyzerContext context;
private SensorContext context;
private AnalyzerOptimizer analyzerOptimizer;

public BatchExtensionDictionnary(ComponentContainer componentContainer, AnalyzerContext context, AnalyzerOptimizer analyzerOptimizer) {
public BatchExtensionDictionnary(ComponentContainer componentContainer, SensorContext context, AnalyzerOptimizer analyzerOptimizer) {
super(componentContainer);
this.context = context;
this.analyzerOptimizer = analyzerOptimizer;
@@ -60,17 +59,17 @@ public class BatchExtensionDictionnary extends org.sonar.api.batch.BatchExtensio
private <T> List<T> getFilteredExtensions(Class<T> type, @Nullable Project project, @Nullable ExtensionMatcher matcher) {
List<T> result = Lists.newArrayList();
for (Object extension : getExtensions(type)) {
if (Sensor.class.equals(type) && extension instanceof Analyzer) {
extension = new SensorWrapper((Analyzer) extension, context, analyzerOptimizer);
if (org.sonar.api.batch.Sensor.class.equals(type) && extension instanceof Sensor) {
extension = new SensorWrapper((Sensor) extension, context, analyzerOptimizer);
}
if (shouldKeep(type, extension, project, matcher)) {
result.add((T) extension);
}
}
if (Sensor.class.equals(type)) {
if (org.sonar.api.batch.Sensor.class.equals(type)) {
// Retrieve Analyzer and wrap then in SensorWrapper
for (Object extension : getExtensions(Analyzer.class)) {
extension = new SensorWrapper((Analyzer) extension, context, analyzerOptimizer);
for (Object extension : getExtensions(Sensor.class)) {
extension = new SensorWrapper((Sensor) extension, context, analyzerOptimizer);
if (shouldKeep(type, extension, project, matcher)) {
result.add((T) extension);
}
@@ -81,7 +80,7 @@ public class BatchExtensionDictionnary extends org.sonar.api.batch.BatchExtensio

private boolean shouldKeep(Class type, Object extension, @Nullable Project project, @Nullable ExtensionMatcher matcher) {
boolean keep = (ClassUtils.isAssignable(extension.getClass(), type)
|| (Sensor.class.equals(type) && ClassUtils.isAssignable(extension.getClass(), Analyzer.class)))
|| (Sensor.class.equals(type) && ClassUtils.isAssignable(extension.getClass(), Sensor.class)))
&& (matcher == null || matcher.accept(extension));
if (keep && project != null && ClassUtils.isAssignable(extension.getClass(), CheckProject.class)) {
keep = ((CheckProject) extension).shouldExecuteOnProject(project);

+ 9
- 8
sonar-batch/src/main/java/org/sonar/batch/mediumtest/AnalyzerMediumTester.java View File

@@ -19,10 +19,11 @@
*/
package org.sonar.batch.mediumtest;

import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.measure.Measure;

import org.apache.commons.io.IOUtils;
import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.batch.debt.internal.DefaultDebtModel;
import org.sonar.api.batch.fs.InputFile;
@@ -194,17 +195,17 @@ public class AnalyzerMediumTester {
}

public static class TaskResult implements ScanTaskObserver {
private List<AnalyzerIssue> issues = new ArrayList<AnalyzerIssue>();
private List<AnalyzerMeasure> measures = new ArrayList<AnalyzerMeasure>();
private List<Issue> issues = new ArrayList<Issue>();
private List<Measure> measures = new ArrayList<Measure>();
private List<InputFile> inputFiles = new ArrayList<InputFile>();

@Override
public void scanTaskCompleted(ProjectScanContainer container) {
for (AnalyzerIssue issue : container.getComponentByType(AnalyzerIssueCache.class).all()) {
for (Issue issue : container.getComponentByType(AnalyzerIssueCache.class).all()) {
issues.add(issue);
}

for (AnalyzerMeasure<?> measure : container.getComponentByType(AnalyzerMeasureCache.class).all()) {
for (Measure<?> measure : container.getComponentByType(AnalyzerMeasureCache.class).all()) {
measures.add(measure);
}

@@ -214,11 +215,11 @@ public class AnalyzerMediumTester {
}
}

public List<AnalyzerIssue> issues() {
public List<Issue> issues() {
return issues;
}

public List<AnalyzerMeasure> measures() {
public List<Measure> measures() {
return measures;
}


+ 1
- 3
sonar-batch/src/main/java/org/sonar/batch/phases/SensorMatcher.java View File

@@ -19,8 +19,6 @@
*/
package org.sonar.batch.phases;

import org.sonar.api.batch.analyzer.Analyzer;

import org.apache.commons.lang.ClassUtils;
import org.sonar.api.BatchExtension;
import org.sonar.api.batch.InstantiationStrategy;
@@ -38,7 +36,7 @@ public abstract class SensorMatcher implements BatchExtension, ExtensionMatcher
@Override
public final boolean accept(Object extension) {
return ClassUtils.isAssignable(extension.getClass(), Sensor.class)
&& acceptSensor((Sensor) extension) || ClassUtils.isAssignable(extension.getClass(), Analyzer.class);
&& acceptSensor((Sensor) extension) || ClassUtils.isAssignable(extension.getClass(), Sensor.class);
}

public abstract boolean acceptSensor(Sensor sensor);

+ 1
- 1
sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java View File

@@ -120,7 +120,7 @@ public class ModuleScanContainer extends ComponentContainer {

TimeMachineConfiguration.class,
DefaultSensorContext.class,
AnalyzerContextAdaptor.class,
SensorContextAdaptor.class,
BatchExtensionDictionnary.class,
DefaultTimeMachine.class,
ViolationFilters.class,

sonar-batch/src/main/java/org/sonar/batch/scan/AnalyzerContextAdaptor.java → sonar-batch/src/main/java/org/sonar/batch/scan/SensorContextAdaptor.java View File

@@ -19,24 +19,22 @@
*/
package org.sonar.batch.scan;

import org.sonar.api.batch.SensorContext;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.issue.internal.DefaultAnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasureBuilder;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.IssueBuilder;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder;
import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.MeasureBuilder;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;
import org.sonar.api.component.ResourcePerspectives;
import org.sonar.api.config.Settings;
import org.sonar.api.issue.Issuable;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.measures.Formula;
import org.sonar.api.measures.Measure;
import org.sonar.api.measures.MetricFinder;
import org.sonar.api.measures.PersistenceMode;
import org.sonar.api.measures.SumChildDistributionFormula;
@@ -45,17 +43,16 @@ import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.Scopes;
import org.sonar.api.rule.RuleKey;
import org.sonar.core.issue.DefaultIssueBuilder;

import java.io.Serializable;

/**
* Implements {@link AnalyzerContext} but forward everything to {@link SensorContext} for backward compatibility.
* Implements {@link SensorContext} but forward everything to {@link org.sonar.api.batch.SensorContext} for backward compatibility.
*
*/
public class AnalyzerContextAdaptor implements AnalyzerContext {
public class SensorContextAdaptor implements SensorContext {

private SensorContext sensorContext;
private org.sonar.api.batch.SensorContext sensorContext;
private MetricFinder metricFinder;
private Project project;
private ResourcePerspectives perspectives;
@@ -63,7 +60,7 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
private FileSystem fs;
private ActiveRules activeRules;

public AnalyzerContextAdaptor(SensorContext sensorContext, MetricFinder metricFinder, Project project, ResourcePerspectives perspectives,
public SensorContextAdaptor(org.sonar.api.batch.SensorContext sensorContext, MetricFinder metricFinder, Project project, ResourcePerspectives perspectives,
Settings settings, FileSystem fs, ActiveRules activeRules) {
this.sensorContext = sensorContext;
this.metricFinder = metricFinder;
@@ -90,20 +87,20 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}

@Override
public <G extends Serializable> AnalyzerMeasureBuilder<G> measureBuilder() {
return new DefaultAnalyzerMeasureBuilder<G>();
public <G extends Serializable> MeasureBuilder<G> measureBuilder() {
return new DefaultMeasureBuilder<G>();
}

@Override
public AnalyzerMeasure getMeasure(String metricKey) {
public Measure getMeasure(String metricKey) {
Metric<?> m = findMetricOrFail(metricKey);
return getMeasure(m);
}

@Override
public <G extends Serializable> AnalyzerMeasure<G> getMeasure(Metric<G> metric) {
public <G extends Serializable> Measure<G> getMeasure(Metric<G> metric) {
org.sonar.api.measures.Metric<G> m = (org.sonar.api.measures.Metric<G>) findMetricOrFail(metric.key());
Measure<G> measure = sensorContext.getMeasure(m);
org.sonar.api.measures.Measure<G> measure = sensorContext.getMeasure(m);
if (measure == null) {
return null;
}
@@ -115,7 +112,7 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}

@Override
public AnalyzerMeasure getMeasure(InputFile file, String metricKey) {
public Measure getMeasure(InputFile file, String metricKey) {
Metric<?> m = findMetricOrFail(metricKey);
return getMeasure(file, m);
}
@@ -129,10 +126,10 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}

@Override
public <G extends Serializable> AnalyzerMeasure<G> getMeasure(InputFile file, Metric<G> metric) {
public <G extends Serializable> Measure<G> getMeasure(InputFile file, Metric<G> metric) {
File fileRes = File.create(file.relativePath());
org.sonar.api.measures.Metric<G> m = (org.sonar.api.measures.Metric<G>) findMetricOrFail(metric.key());
Measure<G> measure = sensorContext.getMeasure(fileRes, m);
org.sonar.api.measures.Measure<G> measure = sensorContext.getMeasure(fileRes, m);
if (measure == null) {
return null;
}
@@ -144,13 +141,13 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}

@Override
public void addMeasure(AnalyzerMeasure<?> measure) {
public void addMeasure(Measure<?> measure) {
org.sonar.api.measures.Metric<?> m = metricFinder.findByKey(measure.metric().key());
if (m == null) {
throw new IllegalStateException("Unknow metric with key: " + measure.metric().key());
}

Measure measureToSave = new Measure(m);
org.sonar.api.measures.Measure measureToSave = new org.sonar.api.measures.Measure(m);
setValueAccordingToMetricType(measure, m, measureToSave);
if (measure.inputFile() != null) {
Formula formula = measure.metric() instanceof org.sonar.api.measures.Metric ?
@@ -165,7 +162,7 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}
}

private void setValueAccordingToMetricType(AnalyzerMeasure<?> measure, org.sonar.api.measures.Metric<?> m, Measure measureToSave) {
private void setValueAccordingToMetricType(Measure<?> measure, org.sonar.api.measures.Metric<?> m, org.sonar.api.measures.Measure measureToSave) {
switch (m.getType()) {
case BOOL:
measureToSave.setValue(Boolean.TRUE.equals(measure.value()) ? 1.0 : 0.0);
@@ -200,12 +197,12 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
}

@Override
public AnalyzerIssueBuilder issueBuilder() {
return new DefaultAnalyzerIssueBuilder();
public IssueBuilder issueBuilder() {
return new DefaultIssueBuilder();
}

@Override
public boolean addIssue(AnalyzerIssue issue) {
public boolean addIssue(Issue issue) {
Resource r;
InputFile inputFile = issue.inputFile();
if (inputFile != null) {
@@ -217,8 +214,8 @@ public class AnalyzerContextAdaptor implements AnalyzerContext {
return issuable.addIssue(toDefaultIssue(project.getKey(), r.getKey(), issue));
}

public static DefaultIssue toDefaultIssue(String projectKey, String componentKey, AnalyzerIssue issue) {
return new DefaultIssueBuilder()
public static DefaultIssue toDefaultIssue(String projectKey, String componentKey, Issue issue) {
return new org.sonar.core.issue.DefaultIssueBuilder()
.componentKey(componentKey)
.projectKey(projectKey)
.ruleKey(RuleKey.of(issue.ruleKey().repository(), issue.ruleKey().rule()))

+ 10
- 12
sonar-batch/src/main/java/org/sonar/batch/scan/SensorWrapper.java View File

@@ -21,29 +21,27 @@ package org.sonar.batch.scan;

import org.sonar.api.batch.DependedUpon;
import org.sonar.api.batch.DependsUpon;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.internal.DefaultAnalyzerDescriptor;
import org.sonar.api.batch.measure.Metric;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;
import org.sonar.api.resources.Project;
import org.sonar.batch.scan2.AnalyzerOptimizer;

import java.util.Arrays;
import java.util.List;

public class SensorWrapper implements Sensor {
public class SensorWrapper implements org.sonar.api.batch.Sensor {

private Analyzer analyzer;
private AnalyzerContext adaptor;
private DefaultAnalyzerDescriptor descriptor;
private Sensor analyzer;
private SensorContext adaptor;
private DefaultSensorDescriptor descriptor;
private AnalyzerOptimizer optimizer;

public SensorWrapper(Analyzer analyzer, AnalyzerContext adaptor, AnalyzerOptimizer optimizer) {
public SensorWrapper(Sensor analyzer, SensorContext adaptor, AnalyzerOptimizer optimizer) {
this.analyzer = analyzer;
this.optimizer = optimizer;
descriptor = new DefaultAnalyzerDescriptor();
descriptor = new DefaultSensorDescriptor();
analyzer.describe(descriptor);
this.adaptor = adaptor;
}
@@ -64,7 +62,7 @@ public class SensorWrapper implements Sensor {
}

@Override
public void analyse(Project module, SensorContext context) {
public void analyse(Project module, org.sonar.api.batch.SensorContext context) {
analyzer.analyse(adaptor);
}
}

+ 5
- 4
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalysisPublisher.java View File

@@ -19,12 +19,13 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.measure.Measure;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
@@ -97,7 +98,7 @@ public final class AnalysisPublisher {
jsonWriter
.beginObject().name("issues")
.beginArray();
for (AnalyzerIssue issue : issueCache.byModule(def.getKey())) {
for (Issue issue : issueCache.byModule(def.getKey())) {
jsonWriter.beginObject()
.prop("repository", issue.ruleKey().repository())
.prop("rule", issue.ruleKey().rule());
@@ -128,7 +129,7 @@ public final class AnalysisPublisher {
jsonWriter
.beginObject().name("measures")
.beginArray();
for (AnalyzerMeasure<?> measure : measureCache.byModule(def.getKey())) {
for (Measure<?> measure : measureCache.byModule(def.getKey())) {
jsonWriter.beginObject()
.prop("metricKey", measure.metric().key());
if (measure.inputFile() != null) {

+ 7
- 6
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerIssueCache.java View File

@@ -19,8 +19,9 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.issue.internal.DefaultIssue;

import org.sonar.api.BatchComponent;
import org.sonar.api.batch.analyzer.issue.internal.DefaultAnalyzerIssue;
import org.sonar.batch.index.Cache;
import org.sonar.batch.index.Caches;

@@ -30,26 +31,26 @@ import org.sonar.batch.index.Caches;
public class AnalyzerIssueCache implements BatchComponent {

// project key -> resource key -> issue key -> issue
private final Cache<DefaultAnalyzerIssue> cache;
private final Cache<DefaultIssue> cache;

public AnalyzerIssueCache(Caches caches) {
cache = caches.createCache("issues");
}

public Iterable<DefaultAnalyzerIssue> byComponent(String projectKey, String resourceKey) {
public Iterable<DefaultIssue> byComponent(String projectKey, String resourceKey) {
return cache.values(projectKey, resourceKey);
}

public Iterable<DefaultAnalyzerIssue> all() {
public Iterable<DefaultIssue> all() {
return cache.values();
}

public AnalyzerIssueCache put(String projectKey, String resourceKey, DefaultAnalyzerIssue issue) {
public AnalyzerIssueCache put(String projectKey, String resourceKey, DefaultIssue issue) {
cache.put(projectKey, resourceKey, issue.key(), issue);
return this;
}

public Iterable<DefaultAnalyzerIssue> byModule(String projectKey) {
public Iterable<DefaultIssue> byModule(String projectKey) {
return cache.values(projectKey);
}


+ 9
- 8
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerMeasureCache.java View File

@@ -19,9 +19,10 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;

import com.google.common.base.Preconditions;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasure;
import org.sonar.batch.index.Cache;
import org.sonar.batch.index.Cache.Entry;
import org.sonar.batch.index.Caches;
@@ -32,25 +33,25 @@ import org.sonar.batch.index.Caches;
public class AnalyzerMeasureCache implements BatchComponent {

// project key -> component key -> metric key -> measure
private final Cache<DefaultAnalyzerMeasure> cache;
private final Cache<DefaultMeasure> cache;

public AnalyzerMeasureCache(Caches caches) {
cache = caches.createCache("measures");
}

public Iterable<Entry<DefaultAnalyzerMeasure>> entries() {
public Iterable<Entry<DefaultMeasure>> entries() {
return cache.entries();
}

public Iterable<DefaultAnalyzerMeasure> byModule(String projectKey) {
public Iterable<DefaultMeasure> byModule(String projectKey) {
return cache.values(projectKey);
}

public DefaultAnalyzerMeasure<?> byMetric(String projectKey, String resourceKey, String metricKey) {
public DefaultMeasure<?> byMetric(String projectKey, String resourceKey, String metricKey) {
return cache.get(projectKey, resourceKey, metricKey);
}

public AnalyzerMeasureCache put(String projectKey, String resourceKey, DefaultAnalyzerMeasure<?> measure) {
public AnalyzerMeasureCache put(String projectKey, String resourceKey, DefaultMeasure<?> measure) {
Preconditions.checkNotNull(projectKey);
Preconditions.checkNotNull(resourceKey);
Preconditions.checkNotNull(measure);
@@ -58,14 +59,14 @@ public class AnalyzerMeasureCache implements BatchComponent {
return this;
}

public boolean contains(String projectKey, String resourceKey, DefaultAnalyzerMeasure<?> measure) {
public boolean contains(String projectKey, String resourceKey, DefaultMeasure<?> measure) {
Preconditions.checkNotNull(projectKey);
Preconditions.checkNotNull(resourceKey);
Preconditions.checkNotNull(measure);
return cache.containsKey(projectKey, resourceKey, measure.metric().key());
}

public Iterable<DefaultAnalyzerMeasure> all() {
public Iterable<DefaultMeasure> all() {
return cache.values();
}


+ 5
- 4
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerOptimizer.java View File

@@ -19,8 +19,9 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;

import org.sonar.api.BatchComponent;
import org.sonar.api.batch.analyzer.internal.DefaultAnalyzerDescriptor;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
@@ -39,14 +40,14 @@ public class AnalyzerOptimizer implements BatchComponent {
/**
* Decide if the given Analyzer should be executed.
*/
public boolean shouldExecute(DefaultAnalyzerDescriptor descriptor) {
public boolean shouldExecute(DefaultSensorDescriptor descriptor) {
// FS Conditions
boolean fsCondition = fsCondition(descriptor);
boolean activeRulesCondition = activeRulesCondition(descriptor);
return fsCondition && activeRulesCondition;
}

private boolean activeRulesCondition(DefaultAnalyzerDescriptor descriptor) {
private boolean activeRulesCondition(DefaultSensorDescriptor descriptor) {
if (!descriptor.ruleRepositories().isEmpty()) {
for (String repoKey : descriptor.ruleRepositories()) {
if (!activeRules.findByRepository(repoKey).isEmpty()) {
@@ -58,7 +59,7 @@ public class AnalyzerOptimizer implements BatchComponent {
return true;
}

private boolean fsCondition(DefaultAnalyzerDescriptor descriptor) {
private boolean fsCondition(DefaultSensorDescriptor descriptor) {
if (!descriptor.languages().isEmpty() || !descriptor.types().isEmpty()) {
FilePredicate langPredicate = descriptor.languages().isEmpty() ? fs.predicates().all() : fs.predicates().hasLanguages(descriptor.languages());


+ 9
- 8
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzersExecutor.java View File

@@ -19,12 +19,13 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.internal.DefaultAnalyzerDescriptor;
import org.sonar.batch.bootstrap.BatchExtensionDictionnary;

import java.util.Collection;
@@ -41,12 +42,12 @@ public class AnalyzersExecutor implements BatchComponent {
this.optimizer = optimizer;
}

public void execute(AnalyzerContext context) {
Collection<Analyzer> analyzers = selector.select(Analyzer.class, null, true, null);
public void execute(SensorContext context) {
Collection<Sensor> analyzers = selector.select(Sensor.class, null, true, null);

for (Analyzer analyzer : analyzers) {
for (Sensor analyzer : analyzers) {

DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor();
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
analyzer.describe(descriptor);

if (!optimizer.shouldExecute(descriptor)) {
@@ -61,7 +62,7 @@ public class AnalyzersExecutor implements BatchComponent {

}

private void executeSensor(AnalyzerContext context, Analyzer analyzer) {
private void executeSensor(SensorContext context, Sensor analyzer) {
analyzer.analyse(context);
}


+ 28
- 27
sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultAnalyzerContext.java View File

@@ -19,15 +19,16 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.issue.internal.DefaultAnalyzerIssue;
import org.sonar.api.batch.analyzer.issue.internal.DefaultAnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasureBuilder;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasureBuilder;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.IssueBuilder;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssue;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder;
import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.MeasureBuilder;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;

import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
@@ -35,12 +36,12 @@ import org.sonar.api.batch.measure.Metric;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.config.Settings;
import org.sonar.batch.issue.IssueFilters;
import org.sonar.batch.scan.AnalyzerContextAdaptor;
import org.sonar.batch.scan.SensorContextAdaptor;
import org.sonar.core.component.ComponentKeys;

import java.io.Serializable;

public class DefaultAnalyzerContext implements AnalyzerContext {
public class DefaultAnalyzerContext implements SensorContext {

private final AnalyzerMeasureCache measureCache;
private final AnalyzerIssueCache issueCache;
@@ -77,46 +78,46 @@ public class DefaultAnalyzerContext implements AnalyzerContext {
}

@Override
public <G extends Serializable> AnalyzerMeasureBuilder<G> measureBuilder() {
return new DefaultAnalyzerMeasureBuilder<G>();
public <G extends Serializable> MeasureBuilder<G> measureBuilder() {
return new DefaultMeasureBuilder<G>();
}

@Override
public AnalyzerMeasure getMeasure(String metricKey) {
public Measure getMeasure(String metricKey) {
return measureCache.byMetric(def.getKey(), def.getKey(), metricKey);
}

@Override
public <G extends Serializable> AnalyzerMeasure<G> getMeasure(Metric<G> metric) {
return (AnalyzerMeasure<G>) measureCache.byMetric(def.getKey(), def.getKey(), metric.key());
public <G extends Serializable> Measure<G> getMeasure(Metric<G> metric) {
return (Measure<G>) measureCache.byMetric(def.getKey(), def.getKey(), metric.key());
}

@Override
public AnalyzerMeasure getMeasure(InputFile file, String metricKey) {
public Measure getMeasure(InputFile file, String metricKey) {
return measureCache.byMetric(def.getKey(), ComponentKeys.createEffectiveKey(def.getKey(), file), metricKey);
}

@Override
public <G extends Serializable> AnalyzerMeasure<G> getMeasure(InputFile file, Metric<G> metric) {
return (AnalyzerMeasure<G>) measureCache.byMetric(def.getKey(), ComponentKeys.createEffectiveKey(def.getKey(), file), metric.key());
public <G extends Serializable> Measure<G> getMeasure(InputFile file, Metric<G> metric) {
return (Measure<G>) measureCache.byMetric(def.getKey(), ComponentKeys.createEffectiveKey(def.getKey(), file), metric.key());
}

@Override
public void addMeasure(AnalyzerMeasure<?> measure) {
public void addMeasure(Measure<?> measure) {
if (measure.inputFile() != null) {
measureCache.put(def.getKey(), ComponentKeys.createEffectiveKey(def.getKey(), measure.inputFile()), (DefaultAnalyzerMeasure) measure);
measureCache.put(def.getKey(), ComponentKeys.createEffectiveKey(def.getKey(), measure.inputFile()), (DefaultMeasure) measure);
} else {
measureCache.put(def.getKey(), def.getKey(), (DefaultAnalyzerMeasure) measure);
measureCache.put(def.getKey(), def.getKey(), (DefaultMeasure) measure);
}
}

@Override
public AnalyzerIssueBuilder issueBuilder() {
return new DefaultAnalyzerIssueBuilder();
public IssueBuilder issueBuilder() {
return new DefaultIssueBuilder();
}

@Override
public boolean addIssue(AnalyzerIssue issue) {
public boolean addIssue(Issue issue) {
String resourceKey;
if (issue.inputFile() != null) {
resourceKey = ComponentKeys.createEffectiveKey(def.getKey(), issue.inputFile());
@@ -124,8 +125,8 @@ public class DefaultAnalyzerContext implements AnalyzerContext {
resourceKey = def.getKey();
}
// TODO Lot of things to do. See ModuleIssues::initAndAddIssue
if (issueFilters.accept(AnalyzerContextAdaptor.toDefaultIssue(def.getKey(), resourceKey, issue), null)) {
issueCache.put(def.getKey(), resourceKey, (DefaultAnalyzerIssue) issue);
if (issueFilters.accept(SensorContextAdaptor.toDefaultIssue(def.getKey(), resourceKey, issue), null)) {
issueCache.put(def.getKey(), resourceKey, (DefaultIssue) issue);
return true;
}


+ 5
- 4
sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultFileLinesContext.java View File

@@ -19,12 +19,13 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;

import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.measures.FileLinesContext;
@@ -118,7 +119,7 @@ public class DefaultFileLinesContext implements FileLinesContext {
Map<Integer, Object> lines = entry.getValue();
if (shouldSave(lines)) {
String data = KeyValueFormat.format(lines);
measureCache.put(projectKey, ComponentKeys.createEffectiveKey(projectKey, inputFile), new DefaultAnalyzerMeasureBuilder<String>()
measureCache.put(projectKey, ComponentKeys.createEffectiveKey(projectKey, inputFile), new DefaultMeasureBuilder<String>()
.forMetric(metric)
.onFile(inputFile)
.withValue(data)
@@ -129,7 +130,7 @@ public class DefaultFileLinesContext implements FileLinesContext {
}

private Map loadData(String metricKey, Converter converter) {
AnalyzerMeasure measure = measureCache.byMetric(projectKey, ComponentKeys.createEffectiveKey(projectKey, inputFile), metricKey);
Measure measure = measureCache.byMetric(projectKey, ComponentKeys.createEffectiveKey(projectKey, inputFile), metricKey);
if (measure == null) {
// no such measure
return ImmutableMap.of();

+ 4
- 3
sonar-batch/src/main/java/org/sonar/batch/scan2/ModuleScanExecutor.java View File

@@ -19,8 +19,9 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.SensorContext;

import com.google.common.collect.Lists;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.batch.issue.ignore.scanner.IssueExclusionsLoader;
import org.sonar.batch.phases.SensorsExecutor;
@@ -33,7 +34,7 @@ import java.util.Collection;
public final class ModuleScanExecutor {

private final AnalyzersExecutor analyzersExecutor;
private final AnalyzerContext analyzerContext;
private final SensorContext analyzerContext;
private final FileSystemLogger fsLogger;
private final DefaultModuleFileSystem fs;
private final QProfileVerifier profileVerifier;
@@ -42,7 +43,7 @@ public final class ModuleScanExecutor {
private AnalysisPublisher analyzisPublisher;

public ModuleScanExecutor(AnalyzersExecutor analyzersExecutor,
AnalyzerContext analyzerContext,
SensorContext analyzerContext,
FileSystemLogger fsLogger, DefaultModuleFileSystem fs, QProfileVerifier profileVerifier,
IssueExclusionsLoader issueExclusionsLoader, AnalysisPublisher analyzisPublisher) {
this.analyzersExecutor = analyzersExecutor;

+ 5
- 4
sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchExtensionDictionnaryTest.java View File

@@ -22,8 +22,7 @@ package org.sonar.batch.bootstrap;
import org.junit.Test;
import org.sonar.api.BatchExtension;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.resources.Project;
import org.sonar.batch.scan2.AnalyzerOptimizer;
@@ -42,7 +41,7 @@ public class BatchExtensionDictionnaryTest {
for (BatchExtension extension : extensions) {
iocContainer.addSingleton(extension);
}
return new BatchExtensionDictionnary(iocContainer, mock(AnalyzerContext.class), mock(AnalyzerOptimizer.class));
return new BatchExtensionDictionnary(iocContainer, mock(SensorContext.class), mock(AnalyzerOptimizer.class));
}

@Test
@@ -63,10 +62,12 @@ public class BatchExtensionDictionnaryTest {

class FakeSensor implements Sensor {

public void analyse(Project project, SensorContext context) {
@Override
public void analyse(Project project, org.sonar.api.batch.SensorContext context) {

}

@Override
public boolean shouldExecuteOnProject(Project project) {
return true;
}

+ 3
- 2
sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java View File

@@ -19,13 +19,14 @@
*/
package org.sonar.batch.mediumtest.issues;

import org.sonar.api.batch.sensor.issue.Issue;

import com.google.common.collect.ImmutableMap;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.batch.mediumtest.AnalyzerMediumTester;
import org.sonar.batch.mediumtest.AnalyzerMediumTester.TaskResult;
@@ -110,7 +111,7 @@ public class IssuesMediumTest {
assertThat(result.issues()).hasSize(20);

boolean foundIssueAtLine1 = false;
for (AnalyzerIssue issue : result.issues()) {
for (Issue issue : result.issues()) {
if (issue.line() == 1) {
foundIssueAtLine1 = true;
assertThat(issue.inputFile()).isEqualTo(new DefaultInputFile("src/sample.xoo"));

+ 5
- 4
sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java View File

@@ -19,13 +19,14 @@
*/
package org.sonar.batch.mediumtest.measures;

import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;

import com.google.common.collect.ImmutableMap;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.batch.mediumtest.AnalyzerMediumTester;
@@ -95,7 +96,7 @@ public class MeasuresMediumTest {

assertThat(result.measures()).hasSize(1);

assertThat(result.measures()).contains(new DefaultAnalyzerMeasureBuilder<Integer>()
assertThat(result.measures()).contains(new DefaultMeasureBuilder<Integer>()
.forMetric(CoreMetrics.LINES)
.onFile(new DefaultInputFile("src/sample.xoo"))
.withValue(20)
@@ -138,13 +139,13 @@ public class MeasuresMediumTest {

assertThat(result.measures()).hasSize(4);

assertThat(result.measures()).contains(new DefaultAnalyzerMeasureBuilder<Integer>()
assertThat(result.measures()).contains(new DefaultMeasureBuilder<Integer>()
.forMetric(CoreMetrics.LINES)
.onFile(new DefaultInputFile("src/sample.xoo"))
.withValue(5)
.build());

assertThat(result.measures()).contains(new DefaultAnalyzerMeasureBuilder<String>()
assertThat(result.measures()).contains(new DefaultMeasureBuilder<String>()
.forMetric(CoreMetrics.SCM_AUTHORS_BY_LINE)
.onFile(new DefaultInputFile("src/sample.xoo"))
.withValue("1=julien;2=julien;3=julien;4=julien;5=simon")

+ 4
- 4
sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/XooPlugin.java View File

@@ -21,8 +21,8 @@ package org.sonar.batch.mediumtest.xoo.plugin;

import org.sonar.api.SonarPlugin;
import org.sonar.batch.mediumtest.xoo.plugin.base.Xoo;
import org.sonar.batch.mediumtest.xoo.plugin.lang.MeasureAnalyzer;
import org.sonar.batch.mediumtest.xoo.plugin.lang.ScmActivityAnalyzer;
import org.sonar.batch.mediumtest.xoo.plugin.lang.MeasureSensor;
import org.sonar.batch.mediumtest.xoo.plugin.lang.ScmActivitySensor;
import org.sonar.batch.mediumtest.xoo.plugin.rule.OneIssuePerLineAnalyzer;

import java.util.Arrays;
@@ -34,8 +34,8 @@ public final class XooPlugin extends SonarPlugin {
public List getExtensions() {
return Arrays.asList(
// language
MeasureAnalyzer.class,
ScmActivityAnalyzer.class,
MeasureSensor.class,
ScmActivitySensor.class,
Xoo.class,

// rules

sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/MeasureAnalyzer.java → sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/MeasureSensor.java View File

@@ -19,13 +19,14 @@
*/
package org.sonar.batch.mediumtest.xoo.plugin.lang;

import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.MeasureBuilder;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.AnalyzerDescriptor;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.measures.CoreMetrics;
@@ -40,17 +41,17 @@ import java.util.List;
/**
* Parse files *.xoo.measures
*/
public class MeasureAnalyzer implements Analyzer {
public class MeasureSensor implements Sensor {

private static final String MEASURES_EXTENSION = ".measures";

private MetricFinder metricFinder;

public MeasureAnalyzer(MetricFinder metricFinder) {
public MeasureSensor(MetricFinder metricFinder) {
this.metricFinder = metricFinder;
}

private void processFileMeasures(InputFile inputFile, AnalyzerContext context) {
private void processFileMeasures(InputFile inputFile, SensorContext context) {
File ioFile = inputFile.file();
File measureFile = new File(ioFile.getParentFile(), ioFile.getName() + MEASURES_EXTENSION);
if (measureFile.exists()) {
@@ -80,9 +81,9 @@ public class MeasureAnalyzer implements Analyzer {
}
}

private AnalyzerMeasure<?> createMeasure(AnalyzerContext context, InputFile xooFile, String metricKey, String value) {
private Measure<?> createMeasure(SensorContext context, InputFile xooFile, String metricKey, String value) {
org.sonar.api.batch.measure.Metric<Serializable> metric = metricFinder.findByKey(metricKey);
AnalyzerMeasureBuilder<Serializable> builder = context.measureBuilder()
MeasureBuilder<Serializable> builder = context.measureBuilder()
.forMetric(metric)
.onFile(xooFile);
if (Boolean.class.equals(metric.valueType())) {
@@ -102,7 +103,7 @@ public class MeasureAnalyzer implements Analyzer {
}

@Override
public void describe(AnalyzerDescriptor descriptor) {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Measure Analyzer")
.provides(CoreMetrics.LINES)
@@ -111,7 +112,7 @@ public class MeasureAnalyzer implements Analyzer {
}

@Override
public void analyse(AnalyzerContext context) {
public void analyse(SensorContext context) {
for (InputFile file : context.fileSystem().inputFiles(context.fileSystem().predicates().hasLanguages(Xoo.KEY))) {
processFileMeasures(file, context);
}

sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/ScmActivityAnalyzer.java → sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/lang/ScmActivitySensor.java View File

@@ -19,15 +19,16 @@
*/
package org.sonar.batch.mediumtest.xoo.plugin.lang;

import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.AnalyzerDescriptor;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.measures.CoreMetrics;
@@ -41,22 +42,22 @@ import java.io.IOException;
import java.util.Date;
import java.util.List;

public class ScmActivityAnalyzer implements Analyzer {
public class ScmActivitySensor implements Sensor {

private static final Logger LOG = LoggerFactory.getLogger(ScmActivityAnalyzer.class);
private static final Logger LOG = LoggerFactory.getLogger(ScmActivitySensor.class);

private static final String SCM_EXTENSION = ".scm";

private final FileSystem fs;
private final FileLinesContextFactory fileLinesContextFactory;

public ScmActivityAnalyzer(FileLinesContextFactory fileLinesContextFactory, FileSystem fileSystem) {
public ScmActivitySensor(FileLinesContextFactory fileLinesContextFactory, FileSystem fileSystem) {
this.fs = fileSystem;
this.fileLinesContextFactory = fileLinesContextFactory;
}

@Override
public void describe(AnalyzerDescriptor descriptor) {
public void describe(SensorDescriptor descriptor) {
descriptor
.name(this.getClass().getSimpleName())
.provides(CoreMetrics.SCM_AUTHORS_BY_LINE,
@@ -66,7 +67,7 @@ public class ScmActivityAnalyzer implements Analyzer {
}

@Override
public void analyse(AnalyzerContext context) {
public void analyse(SensorContext context) {
for (InputFile inputFile : fs.inputFiles(fs.predicates().hasLanguage(Xoo.KEY))) {
processFile(inputFile);
}

+ 10
- 9
sonar-batch/src/test/java/org/sonar/batch/mediumtest/xoo/plugin/rule/OneIssuePerLineAnalyzer.java View File

@@ -19,24 +19,25 @@
*/
package org.sonar.batch.mediumtest.xoo.plugin.rule;

import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.measure.Measure;

import org.slf4j.LoggerFactory;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.AnalyzerContext;
import org.sonar.api.batch.analyzer.AnalyzerDescriptor;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.mediumtest.xoo.plugin.base.Xoo;
import org.sonar.batch.mediumtest.xoo.plugin.base.XooConstants;

public class OneIssuePerLineAnalyzer implements Analyzer {
public class OneIssuePerLineAnalyzer implements Sensor {

public static final String RULE_KEY = "OneIssuePerLine";
private static final String EFFORT_TO_FIX_PROPERTY = "sonar.oneIssuePerLine.effortToFix";

@Override
public void describe(AnalyzerDescriptor descriptor) {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("One Issue Per Line")
.dependsOn(CoreMetrics.LINES)
@@ -45,15 +46,15 @@ public class OneIssuePerLineAnalyzer implements Analyzer {
}

@Override
public void analyse(AnalyzerContext context) {
public void analyse(SensorContext context) {
for (InputFile file : context.fileSystem().inputFiles(context.fileSystem().predicates().hasLanguages(Xoo.KEY))) {
createIssues(file, context);
}
}

private void createIssues(InputFile file, AnalyzerContext context) {
private void createIssues(InputFile file, SensorContext context) {
RuleKey ruleKey = RuleKey.of(XooConstants.REPOSITORY_KEY, RULE_KEY);
AnalyzerMeasure<Integer> linesMeasure = context.getMeasure(file, CoreMetrics.LINES);
Measure<Integer> linesMeasure = context.getMeasure(file, CoreMetrics.LINES);
if (linesMeasure == null) {
LoggerFactory.getLogger(getClass()).warn("Missing measure " + CoreMetrics.LINES_KEY + " on " + file);
} else {

sonar-batch/src/test/java/org/sonar/batch/scan/AnalyzerContextAdapterTest.java → sonar-batch/src/test/java/org/sonar/batch/scan/SensorContextAdapterTest.java View File

@@ -25,20 +25,19 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.batch.analyzer.issue.internal.DefaultAnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.internal.DefaultAnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder;
import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;
import org.sonar.api.component.ResourcePerspectives;
import org.sonar.api.config.Settings;
import org.sonar.api.issue.Issuable;
import org.sonar.api.issue.Issue;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Measure;
import org.sonar.api.measures.MetricFinder;
import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
@@ -49,14 +48,14 @@ import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class AnalyzerContextAdapterTest {
public class SensorContextAdapterTest {

@Rule
public ExpectedException thrown = ExpectedException.none();

private ActiveRules activeRules;
private DefaultFileSystem fs;
private AnalyzerContextAdaptor adaptor;
private SensorContextAdaptor adaptor;
private SensorContext sensorContext;
private Settings settings;
private ResourcePerspectives resourcePerspectives;
@@ -70,7 +69,7 @@ public class AnalyzerContextAdapterTest {
sensorContext = mock(SensorContext.class);
settings = new Settings();
resourcePerspectives = mock(ResourcePerspectives.class);
adaptor = new AnalyzerContextAdaptor(sensorContext, metricFinder, new Project("myProject"),
adaptor = new SensorContextAdaptor(sensorContext, metricFinder, new Project("myProject"),
resourcePerspectives, settings, fs, activeRules);
}

@@ -86,10 +85,10 @@ public class AnalyzerContextAdapterTest {

@Test
public void shouldRedirectProjectMeasuresToSensorContext() {
AnalyzerMeasure<Integer> measure = adaptor.getMeasure(CoreMetrics.NCLOC_KEY);
Measure<Integer> measure = adaptor.getMeasure(CoreMetrics.NCLOC_KEY);
assertThat(measure).isNull();

when(sensorContext.getMeasure(CoreMetrics.NCLOC)).thenReturn(new Measure<Integer>(CoreMetrics.NCLOC, 10.0));
when(sensorContext.getMeasure(CoreMetrics.NCLOC)).thenReturn(new org.sonar.api.measures.Measure<Integer>(CoreMetrics.NCLOC, 10.0));

measure = adaptor.getMeasure(CoreMetrics.NCLOC);
assertThat(measure.metric()).isEqualTo(CoreMetrics.NCLOC);
@@ -105,10 +104,10 @@ public class AnalyzerContextAdapterTest {
public void shouldRedirectFileMeasuresToSensorContext() {
InputFile file = new DefaultInputFile("src/Foo.php");

AnalyzerMeasure<Integer> measure = adaptor.getMeasure(file, CoreMetrics.NCLOC_KEY);
Measure<Integer> measure = adaptor.getMeasure(file, CoreMetrics.NCLOC_KEY);
assertThat(measure).isNull();

when(sensorContext.getMeasure(File.create("src/Foo.php"), CoreMetrics.NCLOC)).thenReturn(new Measure<Integer>(CoreMetrics.NCLOC, 10.0));
when(sensorContext.getMeasure(File.create("src/Foo.php"), CoreMetrics.NCLOC)).thenReturn(new org.sonar.api.measures.Measure<Integer>(CoreMetrics.NCLOC, 10.0));
measure = adaptor.getMeasure(file, CoreMetrics.NCLOC);

assertThat(measure.metric()).isEqualTo(CoreMetrics.NCLOC);
@@ -120,16 +119,16 @@ public class AnalyzerContextAdapterTest {
public void shouldAddMeasureToSensorContext() {
InputFile file = new DefaultInputFile("src/Foo.php");

ArgumentCaptor<Measure> argumentCaptor = ArgumentCaptor.forClass(Measure.class);
ArgumentCaptor<org.sonar.api.measures.Measure> argumentCaptor = ArgumentCaptor.forClass(org.sonar.api.measures.Measure.class);
when(sensorContext.saveMeasure(eq(file), argumentCaptor.capture())).thenReturn(null);

adaptor.addMeasure(new DefaultAnalyzerMeasureBuilder()
adaptor.addMeasure(new DefaultMeasureBuilder()
.onFile(file)
.forMetric(CoreMetrics.NCLOC)
.withValue(10)
.build());

Measure m = argumentCaptor.getValue();
org.sonar.api.measures.Measure m = argumentCaptor.getValue();
assertThat(m.getValue()).isEqualTo(10.0);
assertThat(m.getMetric()).isEqualTo(CoreMetrics.NCLOC);
}
@@ -145,7 +144,7 @@ public class AnalyzerContextAdapterTest {

when(issuable.addIssue(argumentCaptor.capture())).thenReturn(true);

adaptor.addIssue(new DefaultAnalyzerIssueBuilder()
adaptor.addIssue(new DefaultIssueBuilder()
.onFile(file)
.ruleKey(RuleKey.of("foo", "bar"))
.message("Foo")

+ 7
- 7
sonar-batch/src/test/java/org/sonar/batch/scan2/AnalyzerOptimizerTest.java View File

@@ -19,18 +19,18 @@
*/
package org.sonar.batch.scan2;

import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.batch.analyzer.internal.DefaultAnalyzerDescriptor;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.rule.RuleKey;

import static org.fest.assertions.Assertions.assertThat;

public class AnalyzerOptimizerTest {
@@ -48,14 +48,14 @@ public class AnalyzerOptimizerTest {

@Test
public void should_run_analyzer_with_no_metadata() throws Exception {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor();
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();

assertThat(optimizer.shouldExecute(descriptor)).isTrue();
}

@Test
public void should_optimize_on_language() throws Exception {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor()
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnLanguages("java", "php");
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

@@ -65,7 +65,7 @@ public class AnalyzerOptimizerTest {

@Test
public void should_optimize_on_type() throws Exception {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor()
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnFileTypes(InputFile.Type.MAIN);
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

@@ -78,7 +78,7 @@ public class AnalyzerOptimizerTest {

@Test
public void should_optimize_on_both_type_and_language() throws Exception {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor()
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnLanguages("java", "php")
.workOnFileTypes(InputFile.Type.MAIN);
assertThat(optimizer.shouldExecute(descriptor)).isFalse();
@@ -93,7 +93,7 @@ public class AnalyzerOptimizerTest {

@Test
public void should_optimize_on_repository() throws Exception {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor()
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.createIssuesForRuleRepositories("squid");
assertThat(optimizer.shouldExecute(descriptor)).isFalse();


+ 9
- 8
sonar-deprecated/src/main/java/org/sonar/api/batch/BatchExtensionDictionnary.java View File

@@ -19,13 +19,14 @@
*/
package org.sonar.api.batch;

import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;

import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import org.apache.commons.lang.ClassUtils;
import org.sonar.api.BatchExtension;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.analyzer.internal.DefaultAnalyzerDescriptor;
import org.sonar.api.batch.maven.DependsUponMavenPlugin;
import org.sonar.api.batch.maven.MavenPluginHandler;
import org.sonar.api.platform.ComponentContainer;
@@ -148,9 +149,9 @@ public class BatchExtensionDictionnary {
private <T> List<Object> getDependencies(T extension) {
List<Object> result = new ArrayList<Object>();
result.addAll(evaluateAnnotatedClasses(extension, DependsUpon.class));
if (ClassUtils.isAssignable(extension.getClass(), Analyzer.class)) {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor();
((Analyzer) extension).describe(descriptor);
if (ClassUtils.isAssignable(extension.getClass(), Sensor.class)) {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
((Sensor) extension).describe(descriptor);
result.addAll(Arrays.asList(descriptor.dependsOn()));
}
return result;
@@ -162,9 +163,9 @@ public class BatchExtensionDictionnary {
public <T> List<Object> getDependents(T extension) {
List<Object> result = new ArrayList<Object>();
result.addAll(evaluateAnnotatedClasses(extension, DependedUpon.class));
if (ClassUtils.isAssignable(extension.getClass(), Analyzer.class)) {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor();
((Analyzer) extension).describe(descriptor);
if (ClassUtils.isAssignable(extension.getClass(), Sensor.class)) {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
((Sensor) extension).describe(descriptor);
result.addAll(Arrays.asList(descriptor.provides()));
}
return result;

+ 2
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java View File

@@ -40,7 +40,9 @@ import org.sonar.api.resources.Project;
* </p>
*
* @since 1.10
* @deprecated since 4.5 use {@link org.sonar.api.batch.sensor.Sensor}
*/
@Deprecated
public interface Sensor extends BatchExtension, CheckProject {

/**

+ 1
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/SensorContext.java View File

@@ -38,6 +38,7 @@ import java.util.Set;

/**
* @since 1.10
* @deprecated since 4.5
*/
public interface SensorContext {


+ 0
- 21
sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/internal/package-info.java View File

@@ -1,21 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer.measure.internal;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/Analyzer.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/Sensor.java View File

@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer;
package org.sonar.api.batch.sensor;

import com.google.common.annotations.Beta;
import org.sonar.api.BatchExtension;
@@ -35,16 +35,16 @@ import org.sonar.api.BatchExtension;
* @since 4.4
*/
@Beta
public interface Analyzer extends BatchExtension {
public interface Sensor extends BatchExtension {

/**
* Populate {@link AnalyzerDescriptor} of this analyzer.
* Populate {@link SensorDescriptor} of this analyzer.
*/
void describe(AnalyzerDescriptor descriptor);
void describe(SensorDescriptor descriptor);

/**
* The actual analyzer code.
*/
void analyse(AnalyzerContext context);
void analyse(SensorContext context);

}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/AnalyzerContext.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java View File

@@ -17,13 +17,14 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer;
package org.sonar.api.batch.sensor;

import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.IssueBuilder;
import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.MeasureBuilder;

import com.google.common.annotations.Beta;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssueBuilder;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;
@@ -38,7 +39,7 @@ import java.io.Serializable;
* @since 4.4
*/
@Beta
public interface AnalyzerContext {
public interface SensorContext {

/**
* Get settings of the current project.
@@ -58,50 +59,50 @@ public interface AnalyzerContext {
// ----------- MEASURES --------------

/**
* Builder to create a new {@link AnalyzerMeasure}.
* Builder to create a new {@link Measure}.
*/
<G extends Serializable> AnalyzerMeasureBuilder<G> measureBuilder();
<G extends Serializable> MeasureBuilder<G> measureBuilder();

/**
* Find a project measure.
*/
@CheckForNull
AnalyzerMeasure getMeasure(String metricKey);
Measure getMeasure(String metricKey);

/**
* Find a project measure.
*/
@CheckForNull
<G extends Serializable> AnalyzerMeasure<G> getMeasure(Metric<G> metric);
<G extends Serializable> Measure<G> getMeasure(Metric<G> metric);

/**
* Find a file measure.
*/
@CheckForNull
AnalyzerMeasure getMeasure(InputFile file, String metricKey);
Measure getMeasure(InputFile file, String metricKey);

/**
* Find a file measure.
*/
@CheckForNull
<G extends Serializable> AnalyzerMeasure<G> getMeasure(InputFile file, Metric<G> metric);
<G extends Serializable> Measure<G> getMeasure(InputFile file, Metric<G> metric);

/**
* Add a measure. Use {@link #measureBuilder()} to create the new measure.
*/
void addMeasure(AnalyzerMeasure<?> measure);
void addMeasure(Measure<?> measure);

// ----------- ISSUES --------------

/**
* Builder to create a new {@link AnalyzerIssue}.
* Builder to create a new {@link Issue}.
*/
AnalyzerIssueBuilder issueBuilder();
IssueBuilder issueBuilder();

/**
* Add an issue. Use {@link #issueBuilder()} to create the new issue.
* @return true if the new issue is registered, false if the related rule does not exist or is disabled in the Quality profile.
*/
boolean addIssue(AnalyzerIssue issue);
boolean addIssue(Issue issue);

}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/AnalyzerDescriptor.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorDescriptor.java View File

@@ -17,54 +17,54 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer;
package org.sonar.api.batch.sensor;

import com.google.common.annotations.Beta;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;

/**
* Describe what an {@link Analyzer} is doing. Information may be used by the platform
* Describe what an {@link Sensor} is doing. Information may be used by the platform
* to log interesting information or perform some optimization.
* @since 4.4
*/
@Beta
public interface AnalyzerDescriptor {
public interface SensorDescriptor {

/**
* Name of the {@link Analyzer}. Will be displayed in logs.
* Name of the {@link Sensor}. Will be displayed in logs.
*/
AnalyzerDescriptor name(String name);
SensorDescriptor name(String name);

/**
* List {@link Metric} this {@link Analyzer} depends on. Will be used to execute Analyzers in correct order.
* List {@link Metric} this {@link Sensor} depends on. Will be used to execute Analyzers in correct order.
*/
AnalyzerDescriptor dependsOn(Metric<?>... metrics);
SensorDescriptor dependsOn(Metric<?>... metrics);

/**
* List {@link Metric} this {@link Analyzer} provides. Will be used to execute Analyzers in correct order.
* List {@link Metric} this {@link Sensor} provides. Will be used to execute Analyzers in correct order.
*/
AnalyzerDescriptor provides(Metric<?>... metrics);
SensorDescriptor provides(Metric<?>... metrics);

/**
* List languages this {@link Analyzer} work on. May be used by the platform to skip execution of the {@link Analyzer} when
* List languages this {@link Sensor} work on. May be used by the platform to skip execution of the {@link Sensor} when
* no file for given languages are present in the project.
* If no language is provided then it will be executed for all languages.
*/
AnalyzerDescriptor workOnLanguages(String... languageKeys);
SensorDescriptor workOnLanguages(String... languageKeys);

/**
* List {@link InputFile.Type} this {@link Analyzer} work on. May be used by the platform to skip execution of the {@link Analyzer} when
* List {@link InputFile.Type} this {@link Sensor} work on. May be used by the platform to skip execution of the {@link Sensor} when
* no file for given type are present in the project.
* If not type is provided then it will be executed for all types.
*/
AnalyzerDescriptor workOnFileTypes(InputFile.Type... types);
SensorDescriptor workOnFileTypes(InputFile.Type... types);

/**
* List {@link InputFile.Type} this {@link Analyzer} work on. May be used by the platform to skip execution of the {@link Analyzer} when
* List {@link InputFile.Type} this {@link Sensor} work on. May be used by the platform to skip execution of the {@link Sensor} when
* no file for given type are present in the project.
* If not type is provided then it will be executed for all types.
*/
AnalyzerDescriptor createIssuesForRuleRepositories(String... repositoryKeys);
SensorDescriptor createIssuesForRuleRepositories(String... repositoryKeys);

}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/internal/DefaultAnalyzerDescriptor.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptor.java View File

@@ -17,16 +17,17 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.internal;
package org.sonar.api.batch.sensor.internal;

import org.sonar.api.batch.sensor.SensorDescriptor;

import org.sonar.api.batch.analyzer.AnalyzerDescriptor;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;

import java.util.Arrays;
import java.util.Collection;

public class DefaultAnalyzerDescriptor implements AnalyzerDescriptor {
public class DefaultSensorDescriptor implements SensorDescriptor {

private String name;
private Metric<?>[] dependsOn = new Metric<?>[0];
@@ -60,37 +61,37 @@ public class DefaultAnalyzerDescriptor implements AnalyzerDescriptor {
}

@Override
public DefaultAnalyzerDescriptor name(String name) {
public DefaultSensorDescriptor name(String name) {
this.name = name;
return this;
}

@Override
public DefaultAnalyzerDescriptor dependsOn(Metric<?>... metrics) {
public DefaultSensorDescriptor dependsOn(Metric<?>... metrics) {
this.dependsOn = metrics;
return this;
}

@Override
public DefaultAnalyzerDescriptor provides(Metric<?>... metrics) {
public DefaultSensorDescriptor provides(Metric<?>... metrics) {
this.provides = metrics;
return this;
}

@Override
public DefaultAnalyzerDescriptor workOnLanguages(String... languageKeys) {
public DefaultSensorDescriptor workOnLanguages(String... languageKeys) {
this.languages = languageKeys;
return this;
}

@Override
public DefaultAnalyzerDescriptor workOnFileTypes(InputFile.Type... types) {
public DefaultSensorDescriptor workOnFileTypes(InputFile.Type... types) {
this.types = types;
return this;
}

@Override
public DefaultAnalyzerDescriptor createIssuesForRuleRepositories(String... repositoryKeys) {
public DefaultSensorDescriptor createIssuesForRuleRepositories(String... repositoryKeys) {
this.ruleRepositories = repositoryKeys;
return this;
}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/package-info.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/package-info.java View File

@@ -18,4 +18,4 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer.measure;
package org.sonar.api.batch.sensor.internal;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/AnalyzerIssue.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java View File

@@ -17,22 +17,23 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.issue;
package org.sonar.api.batch.sensor.issue;

import org.sonar.api.batch.sensor.Sensor;

import com.google.common.annotations.Beta;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.rule.RuleKey;

import javax.annotation.Nullable;

/**
* Issue reported by an {@link Analyzer}
* Issue reported by an {@link Sensor}
*
* @since 4.4
*/
@Beta
public interface AnalyzerIssue {
public interface Issue {

/**
* The {@link InputFile} this issue belongs to. Returns null if issue is global to the project.

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/AnalyzerIssueBuilder.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java View File

@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.issue;
package org.sonar.api.batch.sensor.issue;

import com.google.common.annotations.Beta;
import org.sonar.api.batch.fs.InputFile;
@@ -26,46 +26,46 @@ import org.sonar.api.rule.RuleKey;
import javax.annotation.Nullable;

/**
* Builder for {@link AnalyzerIssue}.
* Builder for {@link Issue}.
*
* @since 4.4
*/
@Beta
public interface AnalyzerIssueBuilder {
public interface IssueBuilder {

/**
* The {@link RuleKey} of the issue.
*/
AnalyzerIssueBuilder ruleKey(RuleKey ruleKey);
IssueBuilder ruleKey(RuleKey ruleKey);

/**
* The {@link InputFile} the issue belongs to. For global issues call {@link #onProject()}.
*/
AnalyzerIssueBuilder onFile(InputFile file);
IssueBuilder onFile(InputFile file);

/**
* Tell that the issue is global to the project.
*/
AnalyzerIssueBuilder onProject();
IssueBuilder onProject();

/**
* Line of the issue. If no line is specified then issue is supposed to be global to the file.
*/
AnalyzerIssueBuilder atLine(int line);
IssueBuilder atLine(int line);

/**
* Effort to fix the issue.
*/
AnalyzerIssueBuilder effortToFix(@Nullable Double effortToFix);
IssueBuilder effortToFix(@Nullable Double effortToFix);

/**
* Message of the issue.
*/
AnalyzerIssueBuilder message(String message);
IssueBuilder message(String message);

/**
* Build the issue.
*/
AnalyzerIssue build();
Issue build();

}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/internal/DefaultAnalyzerIssue.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java View File

@@ -17,13 +17,14 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.issue.internal;
package org.sonar.api.batch.sensor.issue.internal;

import org.sonar.api.batch.sensor.issue.Issue;

import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.rule.RuleKey;

@@ -32,7 +33,7 @@ import javax.annotation.Nullable;
import java.io.Serializable;
import java.util.UUID;

public class DefaultAnalyzerIssue implements AnalyzerIssue, Serializable {
public class DefaultIssue implements Issue, Serializable {

private final String key;
private final InputFile inputFile;
@@ -41,7 +42,7 @@ public class DefaultAnalyzerIssue implements AnalyzerIssue, Serializable {
private final Integer line;
private final Double effortToFix;

DefaultAnalyzerIssue(DefaultAnalyzerIssueBuilder builder) {
DefaultIssue(DefaultIssueBuilder builder) {
Preconditions.checkNotNull(builder.ruleKey, "ruleKey is mandatory on issue");
this.inputFile = builder.file;
this.ruleKey = builder.ruleKey;
@@ -91,7 +92,7 @@ public class DefaultAnalyzerIssue implements AnalyzerIssue, Serializable {
if (o == null || getClass() != o.getClass()) {
return false;
}
DefaultAnalyzerIssue that = (DefaultAnalyzerIssue) o;
DefaultIssue that = (DefaultIssue) o;
return !key.equals(that.key);
}


sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/internal/DefaultAnalyzerIssueBuilder.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java View File

@@ -17,17 +17,18 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.issue.internal;
package org.sonar.api.batch.sensor.issue.internal;

import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.IssueBuilder;

import com.google.common.base.Preconditions;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssueBuilder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.rule.RuleKey;

import javax.annotation.Nullable;

public class DefaultAnalyzerIssueBuilder implements AnalyzerIssueBuilder {
public class DefaultIssueBuilder implements IssueBuilder {

String key;
Boolean onProject = null;
@@ -38,13 +39,13 @@ public class DefaultAnalyzerIssueBuilder implements AnalyzerIssueBuilder {
Double effortToFix;

@Override
public DefaultAnalyzerIssueBuilder ruleKey(RuleKey ruleKey) {
public DefaultIssueBuilder ruleKey(RuleKey ruleKey) {
this.ruleKey = ruleKey;
return this;
}

@Override
public DefaultAnalyzerIssueBuilder onFile(InputFile file) {
public DefaultIssueBuilder onFile(InputFile file) {
onProject(false);
Preconditions.checkNotNull(file, "InputFile should be non null");
this.file = file;
@@ -52,7 +53,7 @@ public class DefaultAnalyzerIssueBuilder implements AnalyzerIssueBuilder {
}

@Override
public DefaultAnalyzerIssueBuilder onProject() {
public DefaultIssueBuilder onProject() {
onProject(true);
this.file = null;
return this;
@@ -64,19 +65,19 @@ public class DefaultAnalyzerIssueBuilder implements AnalyzerIssueBuilder {
}

@Override
public DefaultAnalyzerIssueBuilder atLine(int line) {
public DefaultIssueBuilder atLine(int line) {
this.line = line;
return this;
}

@Override
public DefaultAnalyzerIssueBuilder effortToFix(@Nullable Double effortToFix) {
public DefaultIssueBuilder effortToFix(@Nullable Double effortToFix) {
this.effortToFix = effortToFix;
return this;
}

@Override
public DefaultAnalyzerIssueBuilder message(String message) {
public DefaultIssueBuilder message(String message) {
this.message = message;
return this;
}
@@ -84,14 +85,14 @@ public class DefaultAnalyzerIssueBuilder implements AnalyzerIssueBuilder {
/**
* For testing only.
*/
public DefaultAnalyzerIssueBuilder withKey(String key) {
public DefaultIssueBuilder withKey(String key) {
this.key = key;
return this;
}

@Override
public AnalyzerIssue build() {
return new DefaultAnalyzerIssue(this);
public Issue build() {
return new DefaultIssue(this);
}

}

+ 21
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/package-info.java View File

@@ -0,0 +1,21 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.sensor.issue.internal;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/package-info.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/package-info.java View File

@@ -18,4 +18,4 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer.issue;
package org.sonar.api.batch.sensor.issue;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/AnalyzerMeasure.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java View File

@@ -17,10 +17,11 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.measure;
package org.sonar.api.batch.sensor.measure;

import org.sonar.api.batch.sensor.Sensor;

import com.google.common.annotations.Beta;
import org.sonar.api.batch.analyzer.Analyzer;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;

@@ -29,11 +30,11 @@ import javax.annotation.Nullable;
import java.io.Serializable;

/**
* A measure computed by an {@link Analyzer}.
* A measure computed by an {@link Sensor}.
* @since 4.4
*/
@Beta
public interface AnalyzerMeasure<G extends Serializable> {
public interface Measure<G extends Serializable> {

/**
* The {@link InputFile} this measure belongs to. Returns null if measure is global to the project.

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/AnalyzerMeasureBuilder.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java View File

@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.measure;
package org.sonar.api.batch.sensor.measure;

import org.sonar.api.batch.measure.Metric;

@@ -27,34 +27,34 @@ import org.sonar.api.batch.fs.InputFile;
import java.io.Serializable;

/**
* Builder to create new {@link AnalyzerMeasure}
* Builder to create new {@link Measure}
* @since 4.4
*/
@Beta
public interface AnalyzerMeasureBuilder<G extends Serializable> {
public interface MeasureBuilder<G extends Serializable> {

/**
* The file the measure belongs to.
*/
AnalyzerMeasureBuilder<G> onFile(InputFile file);
MeasureBuilder<G> onFile(InputFile file);

/**
* Tell that the measure is global to the project.
*/
AnalyzerMeasureBuilder<G> onProject();
MeasureBuilder<G> onProject();

/**
* The metric this measure belong to.
*/
AnalyzerMeasureBuilder<G> forMetric(Metric<G> metric);
MeasureBuilder<G> forMetric(Metric<G> metric);

/**
* Value of the measure.
*/
AnalyzerMeasureBuilder<G> withValue(G value);
MeasureBuilder<G> withValue(G value);

/**
* Build the measure.
*/
AnalyzerMeasure<G> build();
Measure<G> build();
}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/internal/DefaultAnalyzerMeasure.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java View File

@@ -17,14 +17,15 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.measure.internal;
package org.sonar.api.batch.sensor.measure.internal;

import org.sonar.api.batch.sensor.measure.Measure;

import com.google.common.base.Preconditions;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;

@@ -32,13 +33,13 @@ import javax.annotation.Nullable;

import java.io.Serializable;

public class DefaultAnalyzerMeasure<G extends Serializable> implements AnalyzerMeasure<G>, Serializable {
public class DefaultMeasure<G extends Serializable> implements Measure<G>, Serializable {

private final InputFile inputFile;
private final Metric<G> metric;
private final G value;

DefaultAnalyzerMeasure(DefaultAnalyzerMeasureBuilder<G> builder) {
DefaultMeasure(DefaultMeasureBuilder<G> builder) {
Preconditions.checkNotNull(builder.value, "Measure value can't be null");
Preconditions.checkNotNull(builder.metric, "Measure metric can't be null");
Preconditions.checkState(builder.metric.valueType().equals(builder.value.getClass()), "Measure value should be of type " + builder.metric.valueType());
@@ -74,7 +75,7 @@ public class DefaultAnalyzerMeasure<G extends Serializable> implements AnalyzerM
if (obj.getClass() != getClass()) {
return false;
}
DefaultAnalyzerMeasure rhs = (DefaultAnalyzerMeasure) obj;
DefaultMeasure rhs = (DefaultMeasure) obj;
return new EqualsBuilder()
.append(inputFile, rhs.inputFile)
.append(metric, rhs.metric)

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/measure/internal/DefaultAnalyzerMeasureBuilder.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java View File

@@ -17,16 +17,17 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.measure.internal;
package org.sonar.api.batch.sensor.measure.internal;

import org.sonar.api.batch.sensor.measure.MeasureBuilder;

import com.google.common.base.Preconditions;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasureBuilder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;

import java.io.Serializable;

public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements AnalyzerMeasureBuilder<G> {
public class DefaultMeasureBuilder<G extends Serializable> implements MeasureBuilder<G> {

Boolean onProject = null;
InputFile file;
@@ -34,7 +35,7 @@ public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements An
G value;

@Override
public DefaultAnalyzerMeasureBuilder<G> onFile(InputFile inputFile) {
public DefaultMeasureBuilder<G> onFile(InputFile inputFile) {
onProject(false);
Preconditions.checkNotNull(inputFile, "inputFile should be non null");
this.file = inputFile;
@@ -42,7 +43,7 @@ public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements An
}

@Override
public DefaultAnalyzerMeasureBuilder<G> onProject() {
public DefaultMeasureBuilder<G> onProject() {
onProject(true);
this.file = null;
return this;
@@ -54,7 +55,7 @@ public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements An
}

@Override
public DefaultAnalyzerMeasureBuilder<G> forMetric(Metric<G> metric) {
public DefaultMeasureBuilder<G> forMetric(Metric<G> metric) {
Preconditions.checkState(metric != null, "Metric already defined");
Preconditions.checkNotNull(metric, "metric should be non null");
this.metric = metric;
@@ -62,7 +63,7 @@ public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements An
}

@Override
public DefaultAnalyzerMeasureBuilder<G> withValue(G value) {
public DefaultMeasureBuilder<G> withValue(G value) {
Preconditions.checkState(this.value == null, "Measure value already defined");
Preconditions.checkNotNull(value, "Measure value can't be null");
this.value = value;
@@ -70,7 +71,7 @@ public class DefaultAnalyzerMeasureBuilder<G extends Serializable> implements An
}

@Override
public DefaultAnalyzerMeasure<G> build() {
return new DefaultAnalyzerMeasure<G>(this);
public DefaultMeasure<G> build() {
return new DefaultMeasure<G>(this);
}
}

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/issue/internal/package-info.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/package-info.java View File

@@ -18,4 +18,4 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer.issue.internal;
package org.sonar.api.batch.sensor.measure.internal;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/internal/package-info.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/package-info.java View File

@@ -18,4 +18,4 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer.internal;
package org.sonar.api.batch.sensor.measure;

sonar-plugin-api/src/main/java/org/sonar/api/batch/analyzer/package-info.java → sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/package-info.java View File

@@ -18,4 +18,4 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
@javax.annotation.ParametersAreNonnullByDefault
package org.sonar.api.batch.analyzer;
package org.sonar.api.batch.sensor;

sonar-plugin-api/src/test/java/org/sonar/api/batch/analyzer/internal/DefaultAnalyzerDescriptorTest.java → sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptorTest.java View File

@@ -17,19 +17,20 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.internal;
package org.sonar.api.batch.sensor.internal;

import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;

import org.junit.Test;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.measures.CoreMetrics;

import static org.fest.assertions.Assertions.assertThat;

public class DefaultAnalyzerDescriptorTest {
public class DefaultSensorDescriptorTest {

@Test
public void describe() {
DefaultAnalyzerDescriptor descriptor = new DefaultAnalyzerDescriptor();
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
descriptor
.name("Foo")
.dependsOn(CoreMetrics.NCLOC)

sonar-plugin-api/src/test/java/org/sonar/api/batch/analyzer/issue/internal/DefaultAnalyzerIssueTest.java → sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java View File

@@ -17,25 +17,26 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.issue.internal;
package org.sonar.api.batch.sensor.issue.internal;

import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueBuilder;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.batch.analyzer.issue.AnalyzerIssue;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.rule.RuleKey;

import static org.fest.assertions.Assertions.assertThat;

public class DefaultAnalyzerIssueTest {
public class DefaultIssueTest {

@Rule
public ExpectedException thrown = ExpectedException.none();

@Test
public void build_file_issue() {
AnalyzerIssue issue = new DefaultAnalyzerIssueBuilder()
Issue issue = new DefaultIssueBuilder()
.onFile(new DefaultInputFile("src/Foo.php"))
.ruleKey(RuleKey.of("repo", "rule"))
.atLine(1)
@@ -52,7 +53,7 @@ public class DefaultAnalyzerIssueTest {

@Test
public void build_project_issue() {
AnalyzerIssue issue = new DefaultAnalyzerIssueBuilder()
Issue issue = new DefaultIssueBuilder()
.onProject()
.ruleKey(RuleKey.of("repo", "rule"))
.atLine(1)
@@ -71,7 +72,7 @@ public class DefaultAnalyzerIssueTest {
public void not_allowed_to_call_onFile_and_onProject() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("onFile or onProject can be called only once");
new DefaultAnalyzerIssueBuilder()
new DefaultIssueBuilder()
.onProject()
.onFile(new DefaultInputFile("src/Foo.php"))
.ruleKey(RuleKey.of("repo", "rule"))

sonar-plugin-api/src/test/java/org/sonar/api/batch/analyzer/measure/internal/DefaultAnalyzerMeasureTest.java → sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java View File

@@ -17,25 +17,26 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.batch.analyzer.measure.internal;
package org.sonar.api.batch.sensor.measure.internal;

import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.batch.analyzer.measure.AnalyzerMeasure;
import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.measures.CoreMetrics;

import static org.fest.assertions.Assertions.assertThat;

public class DefaultAnalyzerMeasureTest {
public class DefaultMeasureTest {

@Rule
public ExpectedException thrown = ExpectedException.none();

@Test
public void build_file_measure() {
AnalyzerMeasure<Integer> issue = new DefaultAnalyzerMeasureBuilder<Integer>()
Measure<Integer> issue = new DefaultMeasureBuilder<Integer>()
.forMetric(CoreMetrics.LINES)
.onFile(new DefaultInputFile("src/Foo.php"))
.withValue(3)
@@ -48,7 +49,7 @@ public class DefaultAnalyzerMeasureTest {

@Test
public void build_project_measure() {
AnalyzerMeasure<Integer> issue = new DefaultAnalyzerMeasureBuilder<Integer>()
Measure<Integer> issue = new DefaultMeasureBuilder<Integer>()
.forMetric(CoreMetrics.LINES)
.onProject()
.withValue(3)
@@ -63,7 +64,7 @@ public class DefaultAnalyzerMeasureTest {
public void not_allowed_to_call_onFile_and_onProject() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("onFile or onProject can be called only once");
new DefaultAnalyzerMeasureBuilder<Integer>()
new DefaultMeasureBuilder<Integer>()
.onProject()
.onFile(new DefaultInputFile("src/Foo.php"))
.withValue(3)

Loading…
Cancel
Save