@ComputeEngineSide @ExtensionPoint public interface MeasureComputer
Metrics
.
This interface replaces the deprecated class org.sonar.api.batch.Decorator.
public class MyMeasureComputer implements MeasureComputer { @Override public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) { return defContext.newDefinitionBuilder() // Input metrics can be empty, for instance if only issues will be read .setInputMetrics("ncloc") // Output metrics must contains at least one metric .setOutputMetrics("my_new_metric") .build(); } @Override public void compute(MeasureComputerContext context) { int ncloc = context.getMeasure("ncloc"); List<Issue> issues = context.getIssues(); if (ncloc != null && !issues.isEmpty()) { double value = issues.size() / ncloc; context.addMeasure("my_new_metric", value); } } }
public class MyMeasureComputerTest { MyMeasureComputer underTest = new MyMeasureComputer(); @Test public void test_definition() { TestMeasureComputerDefinitionContext defContext = new TestMeasureComputerDefinitionContext(); MeasureComputerDefinition def = underTest.define(defContext); assertThat(def).isNotNull(); assertThat(def.getInputMetrics()).containsOnly("ncloc"); assertThat(def.getOutputMetrics()).containsOnly("my_new_metric"); } @Test public void sum_ncloc_and_issues() { TestMeasureComputerContext context = new TestMeasureComputerContext(underTest); context.addMeasure("ncloc", 2); context.setIssues(Arrays.asList(new TestIssue.Builder().setKey("ABCD").build())); underTest.compute(context); assertThat(context.getMeasureValue("my_new_metric")).isEqualTo(0.5); }
Modifier and Type | Interface and Description |
---|---|
static interface |
MeasureComputer.MeasureComputerContext
Context specific to the computation of the measure(s) of a given component
|
static interface |
MeasureComputer.MeasureComputerDefinition |
static interface |
MeasureComputer.MeasureComputerDefinitionContext
Context specific to the definition of the measure computer
|
Modifier and Type | Method and Description |
---|---|
void |
compute(MeasureComputer.MeasureComputerContext context)
This method will be called on each component of the projects.
|
MeasureComputer.MeasureComputerDefinition |
define(MeasureComputer.MeasureComputerDefinitionContext defContext)
Use to define which metrics are required to compute some measures on some given metrics
|
MeasureComputer.MeasureComputerDefinition define(MeasureComputer.MeasureComputerDefinitionContext defContext)
void compute(MeasureComputer.MeasureComputerContext context)