/** * RangeDistributionBuilder for a defined range * Each entry is initialized at zero * * @param bottomLimits the bottom limits of ranges to be used */ public RangeDistributionBuilder(Number[] bottomLimits) { init(bottomLimits); }
/** * Increments an entry by 1 * * @param value the value to use to pick the entry to increment */ public RangeDistributionBuilder add(Number value) { return add(value, 1); }
/** * Increments an entry * * @param value the value to use to pick the entry to increment * @param count the number by which to increment */ public RangeDistributionBuilder add(Number value, int count) { if (greaterOrEqualsThan(value, bottomLimits[0])) { addValue(value, count); isEmpty = false; } return this; }
private static MeasureComputerDefinition validateDef(MeasureComputerDefinition def) { if (def instanceof MeasureComputerDefinitionImpl) { return def; } // If the computer has not been created by the builder, we recreate it to make sure it's valid Set<String> inputMetrics = def.getInputMetrics(); Set<String> outputMetrics = def.getOutputMetrics(); return new MeasureComputerDefinitionImpl.BuilderImpl() .setInputMetrics(from(inputMetrics).toArray(String.class)) .setOutputMetrics(from(outputMetrics).toArray(String.class)) .build(); } }
@Test public void build_definition() { MeasureComputerDefinition definition = new MeasureComputerDefinitionBuilderImpl() .setInputMetrics("INPUT_1", "INPUT_2") .setOutputMetrics("OUTPUT_1", "OUTPUT_2") .build(); assertThat(definition.getInputMetrics()).containsOnly("INPUT_1", "INPUT_2"); assertThat(definition.getOutputMetrics()).containsOnly("OUTPUT_1", "OUTPUT_2"); }
@Override public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) { return defContext.newDefinitionBuilder() .setInputMetrics(inputMetrics) .setOutputMetrics(outputMetrics) .build(); }
@Test public void build_definition_without_input_metric() { MeasureComputerDefinition definition = new MeasureComputerDefinitionBuilderImpl() .setOutputMetrics("OUTPUT_1", "OUTPUT_2") .build(); assertThat(definition.getInputMetrics()).isEmpty(); assertThat(definition.getOutputMetrics()).containsOnly("OUTPUT_1", "OUTPUT_2"); }
@Test public void input_metrics_can_be_empty() { MeasureComputer.MeasureComputerDefinition measureComputer = new MeasureComputerDefinitionImpl.BuilderImpl() .setInputMetrics() .setOutputMetrics("comment_density_1", "comment_density_2") .build(); assertThat(measureComputer.getInputMetrics()).isEmpty(); }
@Override public void compute(MeasureComputerContext context) { org.sonar.api.ce.measure.Measure ncloc = context.getMeasure(NCLOC_KEY); org.sonar.api.ce.measure.Measure comment = context.getMeasure(COMMENT_LINES_KEY); if (ncloc != null && comment != null) { context.addMeasure(NEW_METRIC_KEY, ncloc.getIntValue() + comment.getIntValue()); } } },
@Override public MeasureComputer.MeasureComputerDefinition define(MeasureComputer.MeasureComputerDefinitionContext defContext) { return new MeasureComputerDefinitionImpl.BuilderImpl() .setInputMetrics(NCLOC_KEY, COMMENT_LINES_KEY) .setOutputMetrics(NEW_METRIC_KEY) .build(); }
@Test public void input_metrics_is_empty_when_not_set() { MeasureComputer.MeasureComputerDefinition measureComputer = new MeasureComputerDefinitionImpl.BuilderImpl() .setOutputMetrics("comment_density_1", "comment_density_2") .build(); assertThat(measureComputer.getInputMetrics()).isEmpty(); }
public Optional<String> getValue() { if (initialized) { return Optional.ofNullable(distribution.build()); } return Optional.empty(); } }
@Override public Collection<String> apply(@Nonnull MeasureComputerWrapper input) { return input.getDefinition().getOutputMetrics(); } }
private static boolean greaterOrEqualsThan(Number n1, Number n2) { return NumberComparator.INSTANCE.compare(n1, n2) >= 0; }
private void addValue(Number value, int count) { for (int i = bottomLimits.length - 1; i >= 0; i--) { if (greaterOrEqualsThan(value, bottomLimits[i])) { this.distributionSet.add(bottomLimits[i], count); return; } } }
@Test public void build_measure_computer_with_multiple_metrics() { String[] inputMetrics = {"ncloc", "comment"}; String[] outputMetrics = {"comment_density_1", "comment_density_2"}; MeasureComputer.MeasureComputerDefinition measureComputer = new MeasureComputerDefinitionImpl.BuilderImpl() .setInputMetrics(inputMetrics) .setOutputMetrics(outputMetrics) .build(); assertThat(measureComputer.getInputMetrics()).containsOnly(inputMetrics); assertThat(measureComputer.getOutputMetrics()).containsOnly(outputMetrics); }
@Override public void compute(MeasureComputer.MeasureComputerContext context) { org.sonar.api.ce.measure.Measure ncloc = context.getMeasure(NCLOC_KEY); org.sonar.api.ce.measure.Measure comment = context.getMeasure(COMMENT_LINES_KEY); if (ncloc != null && comment != null) { context.addMeasure(NEW_METRIC_KEY, ncloc.getIntValue() + comment.getIntValue()); } } };
private void changeDoublesToInts() { for (Number bottomLimit : bottomLimits) { if (NumberComparator.INSTANCE.compare(bottomLimit.intValue(), bottomLimit.doubleValue()) != 0) { // it's not only ints return; } } for (int i = 0; i < bottomLimits.length; i++) { bottomLimits[i] = bottomLimits[i].intValue(); } }
@Test public void build_measure_computer_definition() { String inputMetric = "ncloc"; String outputMetric = "comment_density"; MeasureComputer.MeasureComputerDefinition measureComputer = new MeasureComputerDefinitionImpl.BuilderImpl() .setInputMetrics(inputMetric) .setOutputMetrics(outputMetric) .build(); assertThat(measureComputer.getInputMetrics()).containsOnly(inputMetric); assertThat(measureComputer.getOutputMetrics()).containsOnly(outputMetric); }