Просмотр исходного кода

SONAR-5931 Publish new sensor API

tags/latest-silver-master-#65
Julien HENRY 9 лет назад
Родитель
Сommit
1e6facc123
18 измененных файлов: 135 добавлений и 125 удалений
  1. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java
  2. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java
  3. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java
  4. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java
  5. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java
  6. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java
  7. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/XooTokenizerSensor.java
  8. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/CreateIssueByInternalKeySensor.java
  9. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssueOnDirPerFileSensor.java
  10. 2
    2
      plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssuePerLineSensor.java
  11. 0
    16
      sonar-batch/src/main/java/org/sonar/batch/scan/SensorWrapper.java
  12. 21
    9
      sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerOptimizer.java
  13. 1
    5
      sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java
  14. 21
    7
      sonar-batch/src/test/java/org/sonar/batch/scan2/AnalyzerOptimizerTest.java
  15. 0
    12
      sonar-deprecated/src/main/java/org/sonar/api/batch/BatchExtensionDictionnary.java
  16. 33
    20
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorDescriptor.java
  17. 30
    25
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptor.java
  18. 9
    11
      sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptorTest.java

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/CoveragePerTestSensor.java Просмотреть файл

@@ -98,8 +98,8 @@ public class CoveragePerTestSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Coverage Per Test Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.TEST);
.onlyOnLanguages(Xoo.KEY)
.onlyOnFileType(InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/DependencySensor.java Просмотреть файл

@@ -91,8 +91,8 @@ public class DependencySensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Dependency Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.MAIN);
.onlyOnLanguages(Xoo.KEY)
.onlyOnFileType(InputFile.Type.MAIN);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/MeasureSensor.java Просмотреть файл

@@ -112,8 +112,8 @@ public class MeasureSensor implements Sensor {
descriptor
.name("Xoo Measure Sensor")
.provides(CoreMetrics.LINES)
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onlyOnLanguages(Xoo.KEY)
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SymbolReferencesSensor.java Просмотреть файл

@@ -87,8 +87,8 @@ public class SymbolReferencesSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Symbol Reference Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onlyOnLanguages(Xoo.KEY)
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/SyntaxHighlightingSensor.java Просмотреть файл

@@ -85,8 +85,8 @@ public class SyntaxHighlightingSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Highlighting Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onlyOnLanguages(Xoo.KEY)
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/TestCaseSensor.java Просмотреть файл

@@ -97,8 +97,8 @@ public class TestCaseSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo TestPlan Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.TEST);
.onlyOnLanguages(Xoo.KEY)
.onlyOnFileType(InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/lang/XooTokenizerSensor.java Просмотреть файл

@@ -61,8 +61,8 @@ public class XooTokenizerSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("Xoo Tokenizer Sensor")
.workOnLanguages(Xoo.KEY)
.workOnFileTypes(InputFile.Type.MAIN);
.onlyOnLanguages(Xoo.KEY)
.onlyOnFileType(InputFile.Type.MAIN);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/CreateIssueByInternalKeySensor.java Просмотреть файл

@@ -34,9 +34,9 @@ public class CreateIssueByInternalKeySensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("CreateIssueByInternalKeySensor")
.workOnLanguages(Xoo.KEY)
.onlyOnLanguages(Xoo.KEY)
.createIssuesForRuleRepositories(XooRulesDefinition.XOO_REPOSITORY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssueOnDirPerFileSensor.java Просмотреть файл

@@ -35,9 +35,9 @@ public class OneIssueOnDirPerFileSensor implements Sensor {
public void describe(SensorDescriptor descriptor) {
descriptor
.name("One Issue On Dir Per File")
.workOnLanguages(Xoo.KEY)
.onlyOnLanguages(Xoo.KEY)
.createIssuesForRuleRepositories(XooRulesDefinition.XOO_REPOSITORY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 2
- 2
plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneIssuePerLineSensor.java Просмотреть файл

@@ -39,9 +39,9 @@ public class OneIssuePerLineSensor implements Sensor {
descriptor
.name("One Issue Per Line")
.dependsOn(CoreMetrics.LINES)
.workOnLanguages(Xoo.KEY)
.onlyOnLanguages(Xoo.KEY)
.createIssuesForRuleRepositories(XooRulesDefinition.XOO_REPOSITORY)
.workOnFileTypes(InputFile.Type.MAIN, InputFile.Type.TEST);
.onOnFileType(InputFile.Type.MAIN, InputFile.Type.TEST);
}

@Override

+ 0
- 16
sonar-batch/src/main/java/org/sonar/batch/scan/SensorWrapper.java Просмотреть файл

@@ -21,18 +21,12 @@ package org.sonar.batch.scan;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.DependedUpon;
import org.sonar.api.batch.DependsUpon;
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 org.sonar.api.batch.Sensor {

private static final Logger LOG = LoggerFactory.getLogger(SensorWrapper.class);
@@ -54,16 +48,6 @@ public class SensorWrapper implements org.sonar.api.batch.Sensor {
return wrappedSensor;
}

@DependedUpon
public List<Metric> provides() {
return Arrays.asList(descriptor.provides());
}

@DependsUpon
public List<Metric> depends() {
return Arrays.asList(descriptor.dependsOn());
}

@Override
public boolean shouldExecuteOnProject(Project project) {
return optimizer.shouldExecute(descriptor);

+ 21
- 9
sonar-batch/src/main/java/org/sonar/batch/scan2/AnalyzerOptimizer.java Просмотреть файл

@@ -24,9 +24,9 @@ import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;
import org.sonar.api.config.Settings;

public class AnalyzerOptimizer implements BatchComponent {

@@ -34,10 +34,12 @@ public class AnalyzerOptimizer implements BatchComponent {

private final FileSystem fs;
private final ActiveRules activeRules;
private final Settings settings;

public AnalyzerOptimizer(FileSystem fs, ActiveRules activeRules) {
public AnalyzerOptimizer(FileSystem fs, ActiveRules activeRules, Settings settings) {
this.fs = fs;
this.activeRules = activeRules;
this.settings = settings;
}

/**
@@ -52,6 +54,21 @@ public class AnalyzerOptimizer implements BatchComponent {
LOG.debug("'{}' skipped because there is no related rule activated in the quality profile", descriptor.name());
return false;
}
if (!settingsCondition(descriptor)) {
LOG.debug("'{}' skipped because one of the required properties is missing", descriptor.name());
return false;
}
return true;
}

private boolean settingsCondition(DefaultSensorDescriptor descriptor) {
if (!descriptor.properties().isEmpty()) {
for (String propertyKey : descriptor.properties()) {
if (!settings.hasKey(propertyKey)) {
return false;
}
}
}
return true;
}

@@ -68,15 +85,10 @@ public class AnalyzerOptimizer implements BatchComponent {
}

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

FilePredicate typePredicate = descriptor.types().isEmpty() ? fs.predicates().all() : fs.predicates().none();
for (InputFile.Type type : descriptor.types()) {
typePredicate = fs.predicates().or(
typePredicate,
fs.predicates().hasType(type));
}
FilePredicate typePredicate = descriptor.type() == null ? fs.predicates().all() : fs.predicates().hasType(descriptor.type());
return fs.hasFiles(fs.predicates().and(langPredicate, typePredicate));
}
return true;

+ 1
- 5
sonar-batch/src/main/java/org/sonar/batch/scm/ScmSensor.java Просмотреть файл

@@ -59,11 +59,7 @@ public final class ScmSensor implements Sensor {

@Override
public void describe(SensorDescriptor descriptor) {
descriptor
.name("SCM Sensor")
.provides(CoreMetrics.SCM_AUTHORS_BY_LINE,
CoreMetrics.SCM_LAST_COMMIT_DATETIMES_BY_LINE,
CoreMetrics.SCM_REVISIONS_BY_LINE);
descriptor.name("SCM Sensor");
}

@Override

+ 21
- 7
sonar-batch/src/test/java/org/sonar/batch/scan2/AnalyzerOptimizerTest.java Просмотреть файл

@@ -29,6 +29,7 @@ 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.internal.DefaultSensorDescriptor;
import org.sonar.api.config.Settings;
import org.sonar.api.rule.RuleKey;

import static org.assertj.core.api.Assertions.assertThat;
@@ -41,9 +42,12 @@ public class AnalyzerOptimizerTest {
public ExpectedException thrown = ExpectedException.none();
private AnalyzerOptimizer optimizer;

private Settings settings;

@Before
public void prepare() {
optimizer = new AnalyzerOptimizer(fs, new ActiveRulesBuilder().build());
settings = new Settings();
optimizer = new AnalyzerOptimizer(fs, new ActiveRulesBuilder().build(), settings);
}

@Test
@@ -56,7 +60,7 @@ public class AnalyzerOptimizerTest {
@Test
public void should_optimize_on_language() throws Exception {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnLanguages("java", "php");
.onlyOnLanguages("java", "php");
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

fs.add(new DefaultInputFile("foo", "src/Foo.java").setLanguage("java"));
@@ -66,7 +70,7 @@ public class AnalyzerOptimizerTest {
@Test
public void should_optimize_on_type() throws Exception {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnFileTypes(InputFile.Type.MAIN);
.onlyOnFileType(InputFile.Type.MAIN);
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

fs.add(new DefaultInputFile("foo", "tests/FooTest.java").setType(InputFile.Type.TEST));
@@ -79,8 +83,8 @@ public class AnalyzerOptimizerTest {
@Test
public void should_optimize_on_both_type_and_language() throws Exception {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.workOnLanguages("java", "php")
.workOnFileTypes(InputFile.Type.MAIN);
.onlyOnLanguages("java", "php")
.onlyOnFileType(InputFile.Type.MAIN);
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

fs.add(new DefaultInputFile("foo", "tests/FooTest.java").setLanguage("java").setType(InputFile.Type.TEST));
@@ -101,7 +105,7 @@ public class AnalyzerOptimizerTest {
.create(RuleKey.of("repo1", "foo"))
.activate()
.build();
optimizer = new AnalyzerOptimizer(fs, activeRules);
optimizer = new AnalyzerOptimizer(fs, activeRules, settings);

assertThat(optimizer.shouldExecute(descriptor)).isFalse();

@@ -111,7 +115,17 @@ public class AnalyzerOptimizerTest {
.create(RuleKey.of("squid", "rule"))
.activate()
.build();
optimizer = new AnalyzerOptimizer(fs, activeRules);
optimizer = new AnalyzerOptimizer(fs, activeRules, settings);
assertThat(optimizer.shouldExecute(descriptor)).isTrue();
}

@Test
public void should_optimize_on_settings() throws Exception {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor()
.requireProperty("sonar.foo.reportPath");
assertThat(optimizer.shouldExecute(descriptor)).isFalse();

settings.setProperty("sonar.foo.reportPath", "foo");
assertThat(optimizer.shouldExecute(descriptor)).isTrue();
}
}

+ 0
- 12
sonar-deprecated/src/main/java/org/sonar/api/batch/BatchExtensionDictionnary.java Просмотреть файл

@@ -26,8 +26,6 @@ import org.apache.commons.lang.ClassUtils;
import org.sonar.api.BatchExtension;
import org.sonar.api.batch.maven.DependsUponMavenPlugin;
import org.sonar.api.batch.maven.MavenPluginHandler;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.resources.Project;
import org.sonar.api.utils.AnnotationUtils;
@@ -148,11 +146,6 @@ 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(), Sensor.class)) {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
((Sensor) extension).describe(descriptor);
result.addAll(Arrays.asList(descriptor.dependsOn()));
}
return result;
}

@@ -162,11 +155,6 @@ 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(), Sensor.class)) {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
((Sensor) extension).describe(descriptor);
result.addAll(Arrays.asList(descriptor.provides()));
}
return result;
}


+ 33
- 20
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorDescriptor.java Просмотреть файл

@@ -20,50 +20,63 @@
package org.sonar.api.batch.sensor;

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

/**
* Describe what an {@link Sensor} is doing. Information may be used by the platform
* Describe what a {@link Sensor} is doing. Information may be used by the platform
* to log interesting information or perform some optimization.
* See {@link Sensor#describe(SensorDescriptor)}
* @since 5.0
* @since 5.1
*/
public interface SensorDescriptor {

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

/**
* List {@link Metric} this {@link Sensor} depends on. Will be used to execute sensors in correct order.
* Language this {@link Sensor} work on. Used by the platform to skip execution of the {@link Sensor} when
* no file for given languages are present in the project.
* Default is to execute sensor for all languages.
*/
SensorDescriptor dependsOn(Metric<?>... metrics);
SensorDescriptor onlyOnLanguage(String languageKey);

/**
* List {@link Metric} this {@link Sensor} provides. Will be used to execute sensors in correct order.
* List languages this {@link Sensor} work on. Used by the platform to skip execution of the {@link Sensor} when
* no file for given languages are present in the project.
* Default is to execute sensor for all languages.
*/
SensorDescriptor provides(Metric<?>... metrics);
SensorDescriptor onlyOnLanguages(String... languageKeys);

/**
* 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.
* {@link InputFile.Type} this {@link Sensor} work on. Used by the platform to skip execution of the {@link Sensor} when
* no file for given type are present in the project.
* Default is to execute sensor whatever are the available file types.
*/
SensorDescriptor workOnLanguages(String... languageKeys);
SensorDescriptor onlyOnFileType(InputFile.Type type);

/**
* 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 you don't call this method then it means sensor is working on all input file types.
* Rule repository this {@link Sensor} create issues for. Used by the platform to skip execution of the {@link Sensor} when
* no rule is activated for the given repository.
*/
SensorDescriptor workOnFileTypes(InputFile.Type... types);
SensorDescriptor createIssuesForRuleRepository(String... repositoryKey);

/**
* 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.
* List rule repositories this {@link Sensor} create issues for. Used by the platform to skip execution of the {@link Sensor} when
* no rule is activated for the given repositories.
*/
SensorDescriptor createIssuesForRuleRepositories(String... repositoryKeys);

/**
* Property this {@link Sensor} depends on. Used by the platform to skip execution of the {@link Sensor} when
* property is not set.
*/
SensorDescriptor requireProperty(String... propertyKey);

/**
* List properties this {@link Sensor} depends on. Used by the platform to skip execution of the {@link Sensor} when
* property is not set.
*/
SensorDescriptor requireProperties(String... propertyKeys);

}

+ 30
- 25
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptor.java Просмотреть файл

@@ -19,10 +19,10 @@
*/
package org.sonar.api.batch.sensor.internal;

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

import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.Metric;
import javax.annotation.Nullable;

import java.util.Arrays;
import java.util.Collection;
@@ -30,36 +30,32 @@ import java.util.Collection;
public class DefaultSensorDescriptor implements SensorDescriptor {

private String name;
private Metric<?>[] dependsOn = new Metric<?>[0];
private Metric<?>[] provides = new Metric<?>[0];
private String[] languages = new String[0];
private InputFile.Type[] types = new InputFile.Type[0];
private InputFile.Type type = null;
private String[] ruleRepositories = new String[0];
private String[] properties = new String[0];

public String name() {
return name;
}

public Metric[] dependsOn() {
return dependsOn;
}

public Metric[] provides() {
return provides;
}

public Collection<String> languages() {
return Arrays.asList(languages);
}

public Collection<InputFile.Type> types() {
return Arrays.asList(types);
@Nullable
public InputFile.Type type() {
return type;
}

public Collection<String> ruleRepositories() {
return Arrays.asList(ruleRepositories);
}

public Collection<String> properties() {
return Arrays.asList(properties);
}

@Override
public DefaultSensorDescriptor name(String name) {
this.name = name;
@@ -67,27 +63,25 @@ public class DefaultSensorDescriptor implements SensorDescriptor {
}

@Override
public DefaultSensorDescriptor dependsOn(Metric<?>... metrics) {
this.dependsOn = metrics;
return this;
public DefaultSensorDescriptor onlyOnLanguage(String languageKey) {
return onlyOnLanguages(languageKey);
}

@Override
public DefaultSensorDescriptor provides(Metric<?>... metrics) {
this.provides = metrics;
public DefaultSensorDescriptor onlyOnLanguages(String... languageKeys) {
this.languages = languageKeys;
return this;
}

@Override
public DefaultSensorDescriptor workOnLanguages(String... languageKeys) {
this.languages = languageKeys;
public DefaultSensorDescriptor onlyOnFileType(InputFile.Type type) {
this.type = type;
return this;
}

@Override
public DefaultSensorDescriptor workOnFileTypes(InputFile.Type... types) {
this.types = types;
return this;
public DefaultSensorDescriptor createIssuesForRuleRepository(String... repositoryKey) {
return createIssuesForRuleRepositories(repositoryKey);
}

@Override
@@ -96,4 +90,15 @@ public class DefaultSensorDescriptor implements SensorDescriptor {
return this;
}

@Override
public DefaultSensorDescriptor requireProperty(String... propertyKey) {
return requireProperties(propertyKey);
}

@Override
public DefaultSensorDescriptor requireProperties(String... propertyKeys) {
this.properties = propertyKeys;
return this;
}

}

+ 9
- 11
sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/internal/DefaultSensorDescriptorTest.java Просмотреть файл

@@ -19,11 +19,9 @@
*/
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.assertj.core.api.Assertions.assertThat;

public class DefaultSensorDescriptorTest {
@@ -33,16 +31,16 @@ public class DefaultSensorDescriptorTest {
DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
descriptor
.name("Foo")
.dependsOn(CoreMetrics.NCLOC)
.provides(CoreMetrics.BLOCKER_VIOLATIONS)
.workOnLanguages("java", "php")
.workOnFileTypes(InputFile.Type.MAIN);
.onlyOnLanguage("java")
.onlyOnFileType(InputFile.Type.MAIN)
.requireProperty("sonar.foo.reportPath")
.createIssuesForRuleRepository("squid-java");

assertThat(descriptor.name()).isEqualTo("Foo");
assertThat(descriptor.dependsOn()).containsOnly(CoreMetrics.NCLOC);
assertThat(descriptor.provides()).containsOnly(CoreMetrics.BLOCKER_VIOLATIONS);
assertThat(descriptor.languages()).containsOnly("java", "php");
assertThat(descriptor.types()).containsOnly(InputFile.Type.MAIN);
assertThat(descriptor.languages()).containsOnly("java");
assertThat(descriptor.type()).isEqualTo(InputFile.Type.MAIN);
assertThat(descriptor.properties()).containsOnly("sonar.foo.reportPath");
assertThat(descriptor.ruleRepositories()).containsOnly("squid-java");
}

}

Загрузка…
Отмена
Сохранить