aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2015-07-03 12:42:14 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2015-07-03 13:14:43 +0200
commit077bedd2ae941d320372c7c44a170be23a1679a5 (patch)
treedf174bc142d2102b00442f6e39b2a4007d91718c
parent8d9953d57840d24a7d99d6f263837eaf9ef6addf (diff)
downloadsonarqube-077bedd2ae941d320372c7c44a170be23a1679a5.tar.gz
sonarqube-077bedd2ae941d320372c7c44a170be23a1679a5.zip
SONAR-6680 Move computation of measure Quality Profile to Compute Engine
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/container/ComputeEngineContainerImpl.java8
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImpl.java114
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStep.java28
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImplTest.java (renamed from server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaRepositoryImpl.java)17
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStepTest.java58
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java27
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java23
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java4
9 files changed, 205 insertions, 76 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/container/ComputeEngineContainerImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/container/ComputeEngineContainerImpl.java
index ec4863798e0..00b8cab25a9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/container/ComputeEngineContainerImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/container/ComputeEngineContainerImpl.java
@@ -43,14 +43,14 @@ import org.sonar.server.computation.component.ProjectSettingsRepository;
import org.sonar.server.computation.component.TreeRootHolderImpl;
import org.sonar.server.computation.debt.DebtModelHolderImpl;
import org.sonar.server.computation.event.EventRepositoryImpl;
-import org.sonar.server.computation.formula.FormulaRepositoryImpl;
+import org.sonar.server.computation.formula.CoreFormulaRepositoryImpl;
import org.sonar.server.computation.issue.BaseIssuesLoader;
-import org.sonar.server.computation.issue.DebtCalculator;
-import org.sonar.server.computation.issue.IssueCounter;
import org.sonar.server.computation.issue.DebtAggregator;
+import org.sonar.server.computation.issue.DebtCalculator;
import org.sonar.server.computation.issue.DefaultAssignee;
import org.sonar.server.computation.issue.IssueAssigner;
import org.sonar.server.computation.issue.IssueCache;
+import org.sonar.server.computation.issue.IssueCounter;
import org.sonar.server.computation.issue.IssueLifecycle;
import org.sonar.server.computation.issue.IssueVisitors;
import org.sonar.server.computation.issue.NewDebtAggregator;
@@ -160,7 +160,7 @@ public class ComputeEngineContainerImpl extends ComponentContainer implements Co
EventRepositoryImpl.class,
ProjectSettingsRepository.class,
DbIdsRepository.class,
- FormulaRepositoryImpl.class,
+ CoreFormulaRepositoryImpl.class,
QualityGateServiceImpl.class,
EvaluationResultTextConverterImpl.class,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImpl.java
new file mode 100644
index 00000000000..9b729e2bd64
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImpl.java
@@ -0,0 +1,114 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.formula;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+
+import static org.sonar.api.measures.CoreMetrics.CLASSES_KEY;
+import static org.sonar.api.measures.CoreMetrics.CLASS_COMPLEXITY_KEY;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_CLASSES_KEY;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_IN_FUNCTIONS_KEY;
+import static org.sonar.api.measures.CoreMetrics.COMPLEXITY_KEY;
+import static org.sonar.api.measures.CoreMetrics.FILES_KEY;
+import static org.sonar.api.measures.CoreMetrics.FILE_COMPLEXITY_DISTRIBUTION_KEY;
+import static org.sonar.api.measures.CoreMetrics.FILE_COMPLEXITY_KEY;
+import static org.sonar.api.measures.CoreMetrics.FUNCTIONS_KEY;
+import static org.sonar.api.measures.CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION_KEY;
+import static org.sonar.api.measures.CoreMetrics.FUNCTION_COMPLEXITY_KEY;
+import static org.sonar.api.measures.CoreMetrics.GENERATED_LINES_KEY;
+import static org.sonar.api.measures.CoreMetrics.GENERATED_NCLOC_KEY;
+import static org.sonar.api.measures.CoreMetrics.STATEMENTS_KEY;
+
+public class CoreFormulaRepositoryImpl implements FormulaRepository {
+
+ private static final List<Formula> FORMULAS = ImmutableList.<Formula>of(
+ // TODO When all decorators will be moved to CE, uncomment commented lines to activate all formulas and remove formulas declaration in
+ // {@link org.sonar.api.measures.CoreMetrics}
+ // Sum formulas
+ // new SumFormula(LINES_KEY),
+ new SumFormula(GENERATED_LINES_KEY),
+ // new SumFormula(NCLOC_KEY),
+ new SumFormula(GENERATED_NCLOC_KEY),
+ new SumFormula(CLASSES_KEY),
+ new SumFormula(FUNCTIONS_KEY),
+ new SumFormula(STATEMENTS_KEY),
+ // new SumFormula(PUBLIC_API_KEY),
+ // new SumFormula(COMMENT_LINES_KEY),
+ // new SumFormula(PUBLIC_UNDOCUMENTED_API_KEY),
+ new SumFormula(COMPLEXITY_KEY),
+ new SumFormula(COMPLEXITY_IN_CLASSES_KEY),
+ new SumFormula(COMPLEXITY_IN_FUNCTIONS_KEY),
+ // new SumFormula(LINES_TO_COVER_KEY),
+ // new SumFormula(NEW_LINES_TO_COVER_KEY),
+ // new SumFormula(UNCOVERED_LINES_KEY),
+ // new SumFormula(NEW_UNCOVERED_LINES_KEY),
+ // new SumFormula(CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(NEW_CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(UNCOVERED_CONDITIONS_KEY),
+ // new SumFormula(NEW_UNCOVERED_CONDITIONS_KEY),
+ // new SumFormula(IT_LINES_TO_COVER_KEY),
+ // new SumFormula(NEW_IT_LINES_TO_COVER_KEY),
+ // new SumFormula(IT_UNCOVERED_LINES_KEY),
+ // new SumFormula(NEW_IT_UNCOVERED_LINES_KEY),
+ // new SumFormula(IT_CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(NEW_IT_CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(IT_UNCOVERED_CONDITIONS_KEY),
+ // new SumFormula(NEW_IT_UNCOVERED_CONDITIONS_KEY),
+ // new SumFormula(OVERALL_LINES_TO_COVER_KEY),
+ // new SumFormula(NEW_OVERALL_LINES_TO_COVER_KEY),
+ // new SumFormula(OVERALL_UNCOVERED_LINES_KEY),
+ // new SumFormula(NEW_OVERALL_UNCOVERED_LINES_KEY),
+ // new SumFormula(OVERALL_CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(NEW_OVERALL_CONDITIONS_TO_COVER_KEY),
+ // new SumFormula(OVERALL_UNCOVERED_CONDITIONS_KEY),
+ // new SumFormula(NEW_OVERALL_UNCOVERED_CONDITIONS_KEY),
+
+ // Distribution formulas
+ new DistributionFormula(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY),
+ new DistributionFormula(FILE_COMPLEXITY_DISTRIBUTION_KEY),
+
+ // Average formulas, must be executed after all sum formulas as they depend on their measures
+ AverageFormula.Builder.newBuilder().setOutputMetricKey(FILE_COMPLEXITY_KEY)
+ .setMainMetricKey(COMPLEXITY_KEY)
+ .setByMetricKey(FILES_KEY)
+ .build(),
+ AverageFormula.Builder.newBuilder().setOutputMetricKey(CLASS_COMPLEXITY_KEY)
+ .setMainMetricKey(COMPLEXITY_IN_CLASSES_KEY)
+ .setByMetricKey(CLASSES_KEY)
+ .setFallbackMetricKey(COMPLEXITY_KEY)
+ .build(),
+ AverageFormula.Builder.newBuilder().setOutputMetricKey(FUNCTION_COMPLEXITY_KEY)
+ .setMainMetricKey(COMPLEXITY_IN_FUNCTIONS_KEY)
+ .setByMetricKey(FUNCTIONS_KEY)
+ .setFallbackMetricKey(COMPLEXITY_KEY)
+ .build()
+ );
+
+ /**
+ * Return list of formulas that was previously provided by CoreMetrics
+ */
+ @Override
+ public List<Formula> getFormulas() {
+ return FORMULAS;
+ }
+
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStep.java
index 37f64e6c62f..e1d81e03866 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStep.java
@@ -23,6 +23,7 @@ package org.sonar.server.computation.step;
import com.google.common.base.Optional;
import java.util.HashMap;
import java.util.Map;
+import javax.annotation.CheckForNull;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentVisitor;
import org.sonar.server.computation.component.PathAwareVisitor;
@@ -96,8 +97,11 @@ public class ComputeFormulaMeasuresStep implements ComputationStep {
private void processNotFile(Component component, PathAwareVisitor.Path<Counters> path) {
for (Formula formula : formulaRepository.getFormulas()) {
Counter counter = path.current().getCounter(formula.getOutputMetricKey());
- addNewMeasure(component, path, formula, counter);
- aggregateToParent(path, formula, counter);
+ // If there were no file under this node, the counter won't be initialized
+ if (counter != null) {
+ addNewMeasure(component, formula, counter);
+ aggregateToParent(path, formula, counter);
+ }
}
}
@@ -106,12 +110,12 @@ public class ComputeFormulaMeasuresStep implements ComputationStep {
for (Formula formula : formulaRepository.getFormulas()) {
Counter counter = newCounter(formula);
counter.aggregate(counterContext);
- addNewMeasure(file, path, formula, counter);
+ addNewMeasure(file, formula, counter);
aggregateToParent(path, formula, counter);
}
}
- private void addNewMeasure(Component component, PathAwareVisitor.Path<Counters> path, Formula formula, Counter counter) {
+ private void addNewMeasure(Component component, Formula formula, Counter counter) {
Metric metric = metricRepository.getByKey(formula.getOutputMetricKey());
Optional<Measure> measure = formula.createMeasure(counter, component.getType());
if (measure.isPresent()) {
@@ -136,23 +140,23 @@ public class ComputeFormulaMeasuresStep implements ComputationStep {
}
private static class Counters {
- Map<String, Counter> countersByFormula = new HashMap<>();
+ Map<String, Counter> countersByMetricKey = new HashMap<>();
public void aggregate(String metricKey, Counter childCounter) {
- Counter counter = countersByFormula.get(metricKey);
+ Counter counter = countersByMetricKey.get(metricKey);
if (counter == null) {
- countersByFormula.put(metricKey, childCounter);
+ countersByMetricKey.put(metricKey, childCounter);
} else {
counter.aggregate(childCounter);
}
}
+ /**
+ * Counter can be null on a level when it has not been fed by children levels
+ */
+ @CheckForNull
public Counter getCounter(String metricKey) {
- Counter counter = countersByFormula.get(metricKey);
- if (counter == null) {
- throw new IllegalStateException(String.format("No counter found on metric '%s'", metricKey));
- }
- return counter;
+ return countersByMetricKey.get(metricKey);
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaRepositoryImpl.java b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImplTest.java
index 8d3ee9ab01c..ddba6cc3203 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/formula/FormulaRepositoryImpl.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/formula/CoreFormulaRepositoryImplTest.java
@@ -20,16 +20,15 @@
package org.sonar.server.computation.formula;
-import java.util.Collections;
-import java.util.List;
+import org.junit.Test;
-public class FormulaRepositoryImpl implements FormulaRepository {
+import static org.assertj.core.api.Assertions.assertThat;
- /**
- * TODO Move formula from CoreMetrics here
- */
- public List<Formula> getFormulas() {
- return Collections.emptyList();
- }
+public class CoreFormulaRepositoryImplTest {
+
+ @Test
+ public void check_formulas_are_not_empty() throws Exception {
+ assertThat(new CoreFormulaRepositoryImpl().getFormulas()).isNotEmpty();
+ }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStepTest.java
index 02ffc18dfd4..f28f0095349 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ComputeFormulaMeasuresStepTest.java
@@ -22,7 +22,6 @@ package org.sonar.server.computation.step;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
-import org.assertj.guava.api.Assertions;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -39,6 +38,7 @@ import org.sonar.server.computation.measure.MeasureRepositoryRule;
import org.sonar.server.computation.metric.MetricRepositoryRule;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.guava.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.server.computation.component.Component.Type.DIRECTORY;
@@ -127,10 +127,58 @@ public class ComputeFormulaMeasuresStepTest {
sut.execute();
- Assertions.assertThat(measureRepository.getNewRawMeasures(1)).isEmpty();
- Assertions.assertThat(measureRepository.getNewRawMeasures(11)).isEmpty();
- Assertions.assertThat(measureRepository.getNewRawMeasures(111)).isEmpty();
- Assertions.assertThat(measureRepository.getNewRawMeasures(1111)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(1)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(11)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(111)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(1111)).isEmpty();
+ }
+
+ @Test
+ public void add_no_measure_when_no_file() throws Exception {
+ DumbComponent project = DumbComponent.builder(PROJECT, 1)
+ .addChildren(
+ DumbComponent.builder(MODULE, 11)
+ .addChildren(
+ DumbComponent.builder(DIRECTORY, 111).build()
+ ).build()
+ ).build();
+
+ treeRootHolder.setRoot(project);
+
+ sut.execute();
+
+ assertThat(measureRepository.getNewRawMeasures(1)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(11)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(111)).isEmpty();
+ }
+
+ @Test
+ public void add_no_measure_on_module_without_file() throws Exception {
+ DumbComponent project = DumbComponent.builder(PROJECT, 1)
+ .addChildren(
+ DumbComponent.builder(MODULE, 11)
+ .addChildren(
+ DumbComponent.builder(DIRECTORY, 111).build()
+ ).build(),
+ DumbComponent.builder(MODULE, 12)
+ .addChildren(
+ DumbComponent.builder(DIRECTORY, 121)
+ .addChildren(
+ builder(Component.Type.FILE, 1211).build()
+ ).build()
+ ).build()
+ ).build();
+ treeRootHolder.setRoot(project);
+ measureRepository.addRawMeasure(1211, CoreMetrics.LINES_KEY, newMeasureBuilder().create(10));
+
+ sut.execute();
+
+ assertThat(toEntries(measureRepository.getNewRawMeasures(1))).containsOnly(entryOf(CoreMetrics.NCLOC_KEY, newMeasureBuilder().create(10)));
+ assertThat(measureRepository.getNewRawMeasures(11)).isEmpty();
+ assertThat(measureRepository.getNewRawMeasures(111)).isEmpty();
+ assertThat(toEntries(measureRepository.getNewRawMeasures(12))).containsOnly(entryOf(CoreMetrics.NCLOC_KEY, newMeasureBuilder().create(10)));
+ assertThat(toEntries(measureRepository.getNewRawMeasures(121))).containsOnly(entryOf(CoreMetrics.NCLOC_KEY, newMeasureBuilder().create(10)));
+ assertThat(toEntries(measureRepository.getNewRawMeasures(1211))).containsOnly(entryOf(CoreMetrics.NCLOC_KEY, newMeasureBuilder().create(10)));
}
private static class FakeFormula implements Formula<FakeCounter> {
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
index b46febe1ab5..87d124989ed 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
@@ -65,7 +65,7 @@ public class MeasuresMediumTest {
.newScanTask(new File(projectDir, "sonar-project.properties"))
.start();
- assertThat(result.allMeasures()).hasSize(69);
+ assertThat(result.allMeasures()).hasSize(63);
}
@Test
diff --git a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
index c42ed5031d9..69b176538a1 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/sensor/DefaultSensorStorageTest.java
@@ -39,14 +39,13 @@ import org.sonar.api.batch.sensor.measure.internal.DefaultMeasure;
import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.PersistenceMode;
import org.sonar.api.resources.File;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.duplication.DuplicationCache;
-import org.sonar.batch.index.DefaultIndex;
import org.sonar.batch.index.BatchComponentCache;
+import org.sonar.batch.index.DefaultIndex;
import org.sonar.batch.issue.ModuleIssues;
import org.sonar.batch.report.ReportPublisher;
import org.sonar.batch.sensor.coverage.CoverageExclusions;
@@ -126,30 +125,6 @@ public class DefaultSensorStorageTest {
}
@Test
- public void shouldSetAppropriatePersistenceMode() {
- // Metric FUNCTION_COMPLEXITY_DISTRIBUTION is only persisted on directories.
-
- InputFile file = new DefaultInputFile("foo", "src/Foo.php");
-
- ArgumentCaptor<org.sonar.api.measures.Measure> argumentCaptor = ArgumentCaptor.forClass(org.sonar.api.measures.Measure.class);
- Resource sonarFile = File.create("src/Foo.php").setEffectiveKey("foo:src/Foo.php");
- resourceCache.add(sonarFile, null).setInputPath(file);
-
- when(sonarIndex.addMeasure(eq(sonarFile), argumentCaptor.capture())).thenReturn(null);
-
- sensorStorage.store(new DefaultMeasure()
- .onFile(file)
- .forMetric(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION)
- .withValue("foo"));
-
- org.sonar.api.measures.Measure m = argumentCaptor.getValue();
- assertThat(m.getData()).isEqualTo("foo");
- assertThat(m.getMetric()).isEqualTo(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION);
- assertThat(m.getPersistenceMode()).isEqualTo(PersistenceMode.MEMORY);
-
- }
-
- @Test
public void shouldSaveProjectMeasureToSensorContext() {
ArgumentCaptor<org.sonar.api.measures.Measure> argumentCaptor = ArgumentCaptor.forClass(org.sonar.api.measures.Measure.class);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
index 874c873ae25..87346ae97ff 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
@@ -22,16 +22,14 @@ package org.sonar.api.measures;
import com.google.common.annotations.Beta;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
-import org.sonar.api.resources.Scopes;
-import org.sonar.api.test.MutableTestPlan;
-import org.sonar.api.utils.SonarException;
-
-import javax.annotation.Nullable;
-
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.LinkedList;
import java.util.List;
+import javax.annotation.Nullable;
+import org.sonar.api.resources.Scopes;
+import org.sonar.api.test.MutableTestPlan;
+import org.sonar.api.utils.SonarException;
/**
* @since 1.10
@@ -77,7 +75,6 @@ public final class CoreMetrics {
.setDomain(DOMAIN_SIZE)
.setBestValue(0.0)
.setOptimizedBestValue(true)
- .setFormula(new SumChildValuesFormula(false))
.create();
public static final String NCLOC_KEY = "ncloc";
@@ -112,7 +109,6 @@ public final class CoreMetrics {
.setDomain(DOMAIN_SIZE)
.setBestValue(0.0)
.setOptimizedBestValue(true)
- .setFormula(new SumChildValuesFormula(false))
.create();
public static final String CLASSES_KEY = "classes";
@@ -121,7 +117,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_SIZE)
- .setFormula(new SumChildValuesFormula(false))
.create();
public static final String FILES_KEY = "files";
@@ -164,7 +159,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_SIZE)
- .setFormula(new SumChildValuesFormula(false))
.create();
/**
@@ -194,7 +188,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_SIZE)
- .setFormula(new SumChildValuesFormula(false))
.create();
public static final String PUBLIC_API_KEY = "public_api";
@@ -300,7 +293,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(new SumChildValuesFormula(false))
.create();
public static final String FILE_COMPLEXITY_KEY = "file_complexity";
@@ -309,7 +301,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(true)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(AverageFormula.create(CoreMetrics.COMPLEXITY, CoreMetrics.FILES))
.create();
/**
@@ -326,7 +317,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(new SumChildValuesFormula(false))
.setDeleteHistoricalData(true)
.create();
@@ -341,7 +331,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(true)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(AverageFormula.create(CoreMetrics.COMPLEXITY_IN_CLASSES, CoreMetrics.CLASSES).setFallbackForMainMetric(CoreMetrics.COMPLEXITY))
.create();
/**
@@ -358,7 +347,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(false)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(new SumChildValuesFormula(false))
.setDeleteHistoricalData(true)
.create();
@@ -373,7 +361,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_WORST)
.setQualitative(true)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(AverageFormula.create(CoreMetrics.COMPLEXITY_IN_FUNCTIONS, CoreMetrics.FUNCTIONS).setFallbackForMainMetric(CoreMetrics.COMPLEXITY))
.create();
/**
@@ -403,7 +390,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_NONE)
.setQualitative(true)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(new SumChildDistributionFormula().setMinimumScopeToPersist(Scopes.DIRECTORY))
.create();
public static final String FILE_COMPLEXITY_DISTRIBUTION_KEY = "file_complexity_distribution";
@@ -412,7 +398,6 @@ public final class CoreMetrics {
.setDirection(Metric.DIRECTION_NONE)
.setQualitative(true)
.setDomain(DOMAIN_COMPLEXITY)
- .setFormula(new SumChildDistributionFormula().setMinimumScopeToPersist(Scopes.DIRECTORY))
.create();
// --------------------------------------------------------------------------------------------------------------------
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
index 8e54fe1c7bc..9dad702c95f 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
@@ -650,7 +650,11 @@ public class Metric<G extends Serializable> implements Serializable, org.sonar.a
*
* @param f the formula
* @return the builder
+ *
+ * @deprecated since 5.2, it's no more possible to define a formula on a metric
+ * TODO add a link to the new API to declare formulas
*/
+ @Deprecated
public Builder setFormula(Formula f) {
this.formula = f;
return this;