*/
package org.sonar.server.computation.metric;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
import org.sonar.core.platform.Module;
public class MetricModule extends Module {
@Override
protected void configureModule() {
add(
- BatchMetrics.class,
+ ScannerMetrics.class,
ReportMetricValidatorImpl.class,
MetricRepositoryImpl.class);
}
import javax.annotation.Nullable;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
public class ReportMetricValidatorImpl implements ReportMetricValidator {
private Map<String, org.sonar.api.measures.Metric> metricByKey;
private Set<String> alreadyLoggedMetricKeys = new HashSet<>();
- public ReportMetricValidatorImpl(BatchMetrics batchMetrics) {
- this.metricByKey = FluentIterable.from(batchMetrics.getMetrics()).uniqueIndex(MetricToKey.INSTANCE);
+ public ReportMetricValidatorImpl(ScannerMetrics scannerMetrics) {
+ this.metricByKey = FluentIterable.from(scannerMetrics.getMetrics()).uniqueIndex(MetricToKey.INSTANCE);
}
@Override
import org.sonar.api.measures.Metric;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
static final String METRIC_KEY = "metric_key";
- BatchMetrics batchMetrics = mock(BatchMetrics.class);
+ ScannerMetrics scannerMetrics = mock(ScannerMetrics.class);
@Test
public void validate_metric() throws Exception {
- when(batchMetrics.getMetrics()).thenReturn(ImmutableSet.<Metric>of(new Builder(METRIC_KEY, "name", ValueType.INT).create()));
- ReportMetricValidator validator = new ReportMetricValidatorImpl(batchMetrics);
+ when(scannerMetrics.getMetrics()).thenReturn(ImmutableSet.<Metric>of(new Builder(METRIC_KEY, "name", ValueType.INT).create()));
+ ReportMetricValidator validator = new ReportMetricValidatorImpl(scannerMetrics);
assertThat(validator.validate(METRIC_KEY)).isTrue();
assertThat(logTester.logs()).isEmpty();
@Test
public void not_validate_metric() throws Exception {
- when(batchMetrics.getMetrics()).thenReturn(Collections.<Metric>emptySet());
- ReportMetricValidator validator = new ReportMetricValidatorImpl(batchMetrics);
+ when(scannerMetrics.getMetrics()).thenReturn(Collections.<Metric>emptySet());
+ ReportMetricValidator validator = new ReportMetricValidatorImpl(scannerMetrics);
assertThat(validator.validate(METRIC_KEY)).isFalse();
assertThat(logTester.logs()).containsOnly("The metric 'metric_key' is ignored and should not be send in the batch report");
@Test
public void not_generate_new_log_when_validating_twice_the_same_metric() throws Exception {
- when(batchMetrics.getMetrics()).thenReturn(Collections.<Metric>emptySet());
- ReportMetricValidator validator = new ReportMetricValidatorImpl(batchMetrics);
+ when(scannerMetrics.getMetrics()).thenReturn(Collections.<Metric>emptySet());
+ ReportMetricValidator validator = new ReportMetricValidatorImpl(scannerMetrics);
assertThat(validator.validate(METRIC_KEY)).isFalse();
assertThat(logTester.logs()).hasSize(1);
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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.
- */
-package org.sonar.core.metric;
-
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import java.util.List;
-import java.util.Set;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.BatchSide;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.measures.Metrics;
-import org.sonar.api.ce.ComputeEngineSide;
-
-import static com.google.common.collect.FluentIterable.from;
-import static java.util.Arrays.asList;
-import static org.sonar.api.measures.CoreMetrics.ACCESSORS;
-import static org.sonar.api.measures.CoreMetrics.CLASSES;
-import static org.sonar.api.measures.CoreMetrics.COMMENTED_OUT_CODE_LINES;
-import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES;
-import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES_DATA;
-import static org.sonar.api.measures.CoreMetrics.COMPLEXITY;
-import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_CLASSES;
-import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_FUNCTIONS;
-import static org.sonar.api.measures.CoreMetrics.CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.CONDITIONS_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.COVERAGE_LINE_HITS_DATA;
-import static org.sonar.api.measures.CoreMetrics.COVERED_CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.DIRECTORIES;
-import static org.sonar.api.measures.CoreMetrics.FILES;
-import static org.sonar.api.measures.CoreMetrics.FILE_COMPLEXITY_DISTRIBUTION;
-import static org.sonar.api.measures.CoreMetrics.FUNCTIONS;
-import static org.sonar.api.measures.CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION;
-import static org.sonar.api.measures.CoreMetrics.GENERATED_LINES;
-import static org.sonar.api.measures.CoreMetrics.GENERATED_NCLOC;
-import static org.sonar.api.measures.CoreMetrics.IT_CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.IT_CONDITIONS_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.IT_COVERAGE_LINE_HITS_DATA;
-import static org.sonar.api.measures.CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.IT_LINES_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.IT_UNCOVERED_CONDITIONS;
-import static org.sonar.api.measures.CoreMetrics.IT_UNCOVERED_LINES;
-import static org.sonar.api.measures.CoreMetrics.LINES;
-import static org.sonar.api.measures.CoreMetrics.LINES_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.NCLOC;
-import static org.sonar.api.measures.CoreMetrics.NCLOC_DATA;
-import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_CONDITIONS_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_COVERAGE_LINE_HITS_DATA;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_LINES_TO_COVER;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_UNCOVERED_CONDITIONS;
-import static org.sonar.api.measures.CoreMetrics.OVERALL_UNCOVERED_LINES;
-import static org.sonar.api.measures.CoreMetrics.PUBLIC_API;
-import static org.sonar.api.measures.CoreMetrics.PUBLIC_UNDOCUMENTED_API;
-import static org.sonar.api.measures.CoreMetrics.SKIPPED_TESTS;
-import static org.sonar.api.measures.CoreMetrics.STATEMENTS;
-import static org.sonar.api.measures.CoreMetrics.TESTS;
-import static org.sonar.api.measures.CoreMetrics.TEST_ERRORS;
-import static org.sonar.api.measures.CoreMetrics.TEST_EXECUTION_TIME;
-import static org.sonar.api.measures.CoreMetrics.TEST_FAILURES;
-import static org.sonar.api.measures.CoreMetrics.UNCOVERED_CONDITIONS;
-import static org.sonar.api.measures.CoreMetrics.UNCOVERED_LINES;
-
-/**
- * This class is used to know the list of metrics that can be sent in the batch report.
- * <p/>
- * The batch should not send other metrics, and the Compute Engine should not allow other metrics.
- */
-@ComputeEngineSide
-@BatchSide
-public class BatchMetrics {
-
- private static final Set<Metric> ALLOWED_CORE_METRICS = ImmutableSet.<Metric>of(
- LINES,
- GENERATED_LINES,
- NCLOC,
- NCLOC_DATA,
- GENERATED_NCLOC,
- COMMENT_LINES,
- COMMENT_LINES_DATA,
- NCLOC_LANGUAGE_DISTRIBUTION,
- COMMENTED_OUT_CODE_LINES,
-
- PUBLIC_API,
- PUBLIC_UNDOCUMENTED_API,
-
- FILES,
- DIRECTORIES,
- CLASSES,
- FUNCTIONS,
- STATEMENTS,
- ACCESSORS,
-
- COMPLEXITY,
- COMPLEXITY_IN_CLASSES,
- COMPLEXITY_IN_FUNCTIONS,
- FILE_COMPLEXITY_DISTRIBUTION,
- FUNCTION_COMPLEXITY_DISTRIBUTION,
-
- TESTS,
- SKIPPED_TESTS,
- TEST_ERRORS,
- TEST_FAILURES,
- TEST_EXECUTION_TIME,
-
- LINES_TO_COVER,
- UNCOVERED_LINES,
- COVERAGE_LINE_HITS_DATA,
- CONDITIONS_TO_COVER,
- UNCOVERED_CONDITIONS,
- COVERED_CONDITIONS_BY_LINE,
- CONDITIONS_BY_LINE,
-
- IT_LINES_TO_COVER,
- IT_UNCOVERED_LINES,
- IT_COVERAGE_LINE_HITS_DATA,
- IT_CONDITIONS_TO_COVER,
- IT_UNCOVERED_CONDITIONS,
- IT_COVERED_CONDITIONS_BY_LINE,
- IT_CONDITIONS_BY_LINE,
-
- OVERALL_LINES_TO_COVER,
- OVERALL_UNCOVERED_LINES,
- OVERALL_COVERAGE_LINE_HITS_DATA,
- OVERALL_CONDITIONS_TO_COVER,
- OVERALL_UNCOVERED_CONDITIONS,
- OVERALL_COVERED_CONDITIONS_BY_LINE,
- OVERALL_CONDITIONS_BY_LINE);
-
- private final Set<Metric> metrics;
-
- public BatchMetrics() {
- this.metrics = ALLOWED_CORE_METRICS;
- }
-
- public BatchMetrics(Metrics[] metricsRepositories) {
- this.metrics = ImmutableSet.copyOf(Iterables.concat(getPluginMetrics(metricsRepositories), ALLOWED_CORE_METRICS));
- }
-
- public Set<Metric> getMetrics() {
- return metrics;
- }
-
- private static Iterable<Metric> getPluginMetrics(Metrics[] metricsRepositories) {
- return from(asList(metricsRepositories)).transformAndConcat(FlattenMetrics.INSTANCE);
- }
-
- private enum FlattenMetrics implements Function<Metrics, List<Metric>> {
- INSTANCE;
-
- @Nullable
- @Override
- public List<Metric> apply(Metrics input) {
- return input.getMetrics();
- }
- }
-}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.
+ */
+package org.sonar.core.metric;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Nullable;
+import org.sonar.api.batch.BatchSide;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.Metrics;
+import org.sonar.api.ce.ComputeEngineSide;
+
+import static com.google.common.collect.FluentIterable.from;
+import static java.util.Arrays.asList;
+import static org.sonar.api.measures.CoreMetrics.ACCESSORS;
+import static org.sonar.api.measures.CoreMetrics.CLASSES;
+import static org.sonar.api.measures.CoreMetrics.COMMENTED_OUT_CODE_LINES;
+import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES;
+import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES_DATA;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_CLASSES;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_FUNCTIONS;
+import static org.sonar.api.measures.CoreMetrics.CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.CONDITIONS_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.COVERAGE_LINE_HITS_DATA;
+import static org.sonar.api.measures.CoreMetrics.COVERED_CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.DIRECTORIES;
+import static org.sonar.api.measures.CoreMetrics.FILES;
+import static org.sonar.api.measures.CoreMetrics.FILE_COMPLEXITY_DISTRIBUTION;
+import static org.sonar.api.measures.CoreMetrics.FUNCTIONS;
+import static org.sonar.api.measures.CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION;
+import static org.sonar.api.measures.CoreMetrics.GENERATED_LINES;
+import static org.sonar.api.measures.CoreMetrics.GENERATED_NCLOC;
+import static org.sonar.api.measures.CoreMetrics.IT_CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.IT_CONDITIONS_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.IT_COVERAGE_LINE_HITS_DATA;
+import static org.sonar.api.measures.CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.IT_LINES_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.IT_UNCOVERED_CONDITIONS;
+import static org.sonar.api.measures.CoreMetrics.IT_UNCOVERED_LINES;
+import static org.sonar.api.measures.CoreMetrics.LINES;
+import static org.sonar.api.measures.CoreMetrics.LINES_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.NCLOC;
+import static org.sonar.api.measures.CoreMetrics.NCLOC_DATA;
+import static org.sonar.api.measures.CoreMetrics.NCLOC_LANGUAGE_DISTRIBUTION;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_CONDITIONS_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_COVERAGE_LINE_HITS_DATA;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_LINES_TO_COVER;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_UNCOVERED_CONDITIONS;
+import static org.sonar.api.measures.CoreMetrics.OVERALL_UNCOVERED_LINES;
+import static org.sonar.api.measures.CoreMetrics.PUBLIC_API;
+import static org.sonar.api.measures.CoreMetrics.PUBLIC_UNDOCUMENTED_API;
+import static org.sonar.api.measures.CoreMetrics.SKIPPED_TESTS;
+import static org.sonar.api.measures.CoreMetrics.STATEMENTS;
+import static org.sonar.api.measures.CoreMetrics.TESTS;
+import static org.sonar.api.measures.CoreMetrics.TEST_ERRORS;
+import static org.sonar.api.measures.CoreMetrics.TEST_EXECUTION_TIME;
+import static org.sonar.api.measures.CoreMetrics.TEST_FAILURES;
+import static org.sonar.api.measures.CoreMetrics.UNCOVERED_CONDITIONS;
+import static org.sonar.api.measures.CoreMetrics.UNCOVERED_LINES;
+
+/**
+ * This class is used to know the list of metrics that can be sent in the analysis report.
+ * <p/>
+ * Scanners should not send other metrics, and the Compute Engine should not allow other metrics.
+ */
+@ComputeEngineSide
+@BatchSide
+public class ScannerMetrics {
+
+ private static final Set<Metric> ALLOWED_CORE_METRICS = ImmutableSet.<Metric>of(
+ LINES,
+ GENERATED_LINES,
+ NCLOC,
+ NCLOC_DATA,
+ GENERATED_NCLOC,
+ COMMENT_LINES,
+ COMMENT_LINES_DATA,
+ NCLOC_LANGUAGE_DISTRIBUTION,
+ COMMENTED_OUT_CODE_LINES,
+
+ PUBLIC_API,
+ PUBLIC_UNDOCUMENTED_API,
+
+ FILES,
+ DIRECTORIES,
+ CLASSES,
+ FUNCTIONS,
+ STATEMENTS,
+ ACCESSORS,
+
+ COMPLEXITY,
+ COMPLEXITY_IN_CLASSES,
+ COMPLEXITY_IN_FUNCTIONS,
+ FILE_COMPLEXITY_DISTRIBUTION,
+ FUNCTION_COMPLEXITY_DISTRIBUTION,
+
+ TESTS,
+ SKIPPED_TESTS,
+ TEST_ERRORS,
+ TEST_FAILURES,
+ TEST_EXECUTION_TIME,
+
+ LINES_TO_COVER,
+ UNCOVERED_LINES,
+ COVERAGE_LINE_HITS_DATA,
+ CONDITIONS_TO_COVER,
+ UNCOVERED_CONDITIONS,
+ COVERED_CONDITIONS_BY_LINE,
+ CONDITIONS_BY_LINE,
+
+ IT_LINES_TO_COVER,
+ IT_UNCOVERED_LINES,
+ IT_COVERAGE_LINE_HITS_DATA,
+ IT_CONDITIONS_TO_COVER,
+ IT_UNCOVERED_CONDITIONS,
+ IT_COVERED_CONDITIONS_BY_LINE,
+ IT_CONDITIONS_BY_LINE,
+
+ OVERALL_LINES_TO_COVER,
+ OVERALL_UNCOVERED_LINES,
+ OVERALL_COVERAGE_LINE_HITS_DATA,
+ OVERALL_CONDITIONS_TO_COVER,
+ OVERALL_UNCOVERED_CONDITIONS,
+ OVERALL_COVERED_CONDITIONS_BY_LINE,
+ OVERALL_CONDITIONS_BY_LINE);
+
+ private final Set<Metric> metrics;
+
+ public ScannerMetrics() {
+ this.metrics = ALLOWED_CORE_METRICS;
+ }
+
+ public ScannerMetrics(Metrics[] metricsRepositories) {
+ this.metrics = ImmutableSet.copyOf(Iterables.concat(getPluginMetrics(metricsRepositories), ALLOWED_CORE_METRICS));
+ }
+
+ public Set<Metric> getMetrics() {
+ return metrics;
+ }
+
+ private static Iterable<Metric> getPluginMetrics(Metrics[] metricsRepositories) {
+ return from(asList(metricsRepositories)).transformAndConcat(FlattenMetrics.INSTANCE);
+ }
+
+ private enum FlattenMetrics implements Function<Metrics, List<Metric>> {
+ INSTANCE;
+
+ @Nullable
+ @Override
+ public List<Metric> apply(Metrics input) {
+ return input.getMetrics();
+ }
+ }
+}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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.
- */
-package org.sonar.core.metric;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import java.util.List;
-import org.junit.Test;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.measures.Metrics;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class BatchMetricsTest {
-
- static final BatchMetrics SENSOR_METRICS_WITHOUT_METRIC_PLUGIN = new BatchMetrics(new Metrics[] {});
- static final BatchMetrics SENSOR_METRICS_WITH_PLUGIN = new BatchMetrics(new Metrics[] {new FakeMetrics()});
-
- @Test
- public void check_number_of_allowed_core_metrics() throws Exception {
- assertThat(SENSOR_METRICS_WITHOUT_METRIC_PLUGIN.getMetrics()).hasSize(48);
- }
-
- @Test
- public void check_metrics_from_plugin() throws Exception {
- List<Metric> metrics = newArrayList(SENSOR_METRICS_WITH_PLUGIN.getMetrics());
- Iterables.removeAll(metrics, SENSOR_METRICS_WITHOUT_METRIC_PLUGIN.getMetrics());
- assertThat(metrics).hasSize(2);
- }
-
- private static class FakeMetrics implements Metrics {
-
- @Override
- public List<Metric> getMetrics() {
- return ImmutableList.<Metric>of(
- new Metric.Builder("key1", "name1", Metric.ValueType.INT).create(),
- new Metric.Builder("key2", "name2", Metric.ValueType.FLOAT).create());
- }
- }
-}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.
+ */
+package org.sonar.core.metric;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import java.util.List;
+import org.junit.Test;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.measures.Metrics;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ScannerMetricsTest {
+
+ static final ScannerMetrics SENSOR_METRICS_WITHOUT_METRIC_PLUGIN = new ScannerMetrics(new Metrics[] {});
+ static final ScannerMetrics SENSOR_METRICS_WITH_PLUGIN = new ScannerMetrics(new Metrics[] {new FakeMetrics()});
+
+ @Test
+ public void check_number_of_allowed_core_metrics() throws Exception {
+ assertThat(SENSOR_METRICS_WITHOUT_METRIC_PLUGIN.getMetrics()).hasSize(48);
+ }
+
+ @Test
+ public void check_metrics_from_plugin() throws Exception {
+ List<Metric> metrics = newArrayList(SENSOR_METRICS_WITH_PLUGIN.getMetrics());
+ Iterables.removeAll(metrics, SENSOR_METRICS_WITHOUT_METRIC_PLUGIN.getMetrics());
+ assertThat(metrics).hasSize(2);
+ }
+
+ private static class FakeMetrics implements Metrics {
+
+ @Override
+ public List<Metric> getMetrics() {
+ return ImmutableList.<Metric>of(
+ new Metric.Builder("key1", "name1", Metric.ValueType.INT).create(),
+ new Metric.Builder("key2", "name2", Metric.ValueType.FLOAT).create());
+ }
+ }
+}
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.measure.MeasureCache;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Measure.BoolValue;
import org.sonar.scanner.protocol.output.ScannerReport.Measure.DoubleValue;
private final BatchComponentCache resourceCache;
private final MeasureCache measureCache;
- private final BatchMetrics batchMetrics;
+ private final ScannerMetrics scannerMetrics;
- public MeasuresPublisher(BatchComponentCache resourceCache, MeasureCache measureCache, BatchMetrics batchMetrics) {
+ public MeasuresPublisher(BatchComponentCache resourceCache, MeasureCache measureCache, ScannerMetrics scannerMetrics) {
this.resourceCache = resourceCache;
this.measureCache = measureCache;
- this.batchMetrics = batchMetrics;
+ this.scannerMetrics = scannerMetrics;
}
@Override
public void publish(ScannerReportWriter writer) {
- final Set<String> allowedMetricKeys = newHashSet(transform(batchMetrics.getMetrics(), new MetricToKey()));
+ final Set<String> allowedMetricKeys = newHashSet(transform(scannerMetrics.getMetrics(), new MetricToKey()));
for (final BatchComponent resource : resourceCache.all()) {
Iterable<Measure> batchMeasures = measureCache.byResource(resource.resource());
Iterable<org.sonar.scanner.protocol.output.ScannerReport.Measure> reportMeasures = transform(
import org.sonar.batch.source.CodeColorizers;
import org.sonar.batch.test.TestPlanBuilder;
import org.sonar.batch.test.TestableBuilder;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
import org.sonar.core.platform.ComponentContainer;
public class ProjectScanContainer extends ComponentContainer {
ProjectSettings.class,
// Report
- BatchMetrics.class,
+ ScannerMetrics.class,
ReportPublisher.class,
AnalysisContextReportPublisher.class,
MetadataPublisher.class,
import org.sonar.api.resources.Resource;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.measure.MeasureCache;
-import org.sonar.core.metric.BatchMetrics;
+import org.sonar.core.metric.ScannerMetrics;
import org.sonar.core.util.CloseableIterator;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportReader;
resourceCache.add(sampleFile, null);
measureCache = mock(MeasureCache.class);
when(measureCache.byResource(any(Resource.class))).thenReturn(Collections.<Measure>emptyList());
- publisher = new MeasuresPublisher(resourceCache, measureCache, new BatchMetrics());
+ publisher = new MeasuresPublisher(resourceCache, measureCache, new ScannerMetrics());
}
@Test