Package org.sonar.api.ce.measure
Interface MeasureComputer
-
@ComputeEngineSide @ExtensionPoint public interface MeasureComputer
Define how to compute new measures on some metrics declared byMetrics
.This interface replaces the deprecated class org.sonar.api.batch.Decorator.
How to use
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); } } }
How to test
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); }
- Since:
- 5.2
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
MeasureComputer.MeasureComputerContext
Context specific to the computation of the measure(s) of a given componentstatic interface
MeasureComputer.MeasureComputerDefinition
static interface
MeasureComputer.MeasureComputerDefinitionContext
Context specific to the definition of the measure computer
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method 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
-
-
-
Method Detail
-
define
MeasureComputer.MeasureComputerDefinition define(MeasureComputer.MeasureComputerDefinitionContext defContext)
Use to define which metrics are required to compute some measures on some given metrics
-
compute
void compute(MeasureComputer.MeasureComputerContext context)
This method will be called on each component of the projects.
-
-