@@ -1,2 +1 @@ | |||
ncloc:42 | |||
ncloc_data:1=0;2=0;3=0;4=0;5=1;6=1;7=0;8=1;9=1;10=1;11=1;12=1;13=1;14=1;15=1;16=1;17=1;18=1;19=1;20=1;21=1;22=1;23=1;24=1;25=1;26=1;27=1;28=1;29=1;30=1;31=1;32=1;33=1;34=1;35=1;36=1;37=1;38=1;39=1;40=1;41=0;42=0; |
@@ -1,3 +1,2 @@ | |||
ncloc:36 | |||
ncloc_data:1=0;2=0;3=0;4=0;5=1;6=1;7=0;8=1;9=1;10=1;11=1;12=1;13=1;14=1;15=1;16=1;17=1;18=1;19=1;20=1;21=1;22=1;23=1;24=1;25=1;26=1;27=1;28=1;29=1;30=1;31=1;32=1;33=1;34=1;35=0;36=0; | |||
@@ -1,3 +1,2 @@ | |||
ncloc:81 | |||
ncloc_data:1=0;2=0;3=0;4=0;5=1;6=1;7=0;8=1;9=1;10=1;11=1;12=1;13=1;14=1;15=1;16=1;17=1;18=1;19=1;20=1;21=1;22=1;23=1;24=1;25=1;26=1;27=1;28=1;29=1;30=1;31=1;32=1;33=1;34=1;35=1;36=1;37=1;38=0;39=1;40=1;41=0;42=0;43=1;44=1;45=1;46=1;47=1;48=0;49=1;50=1;51=1;52=1;53=0;54=0;55=0;56=1;57=1;58=1;59=1;60=1;61=1;62=1;63=1;64=1;65=1;66=1;67=1;68=1;69=1;70=1;71=1;72=0;73=1;74=1;75=1;76=1;77=1;78=1;79=0;80=0;81=0; | |||
@@ -52,16 +52,16 @@ public class NewDuplicationsTest { | |||
@Test | |||
public void new_duplications_on_project() throws Exception { | |||
Resource project = getComponent("new-duplications"); | |||
assertThat(project.getMeasure("new_ncloc").getVariation1()).isEqualTo(75d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(83d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(71d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(94.7d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(85.5d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(12d, DEFAULT_OFFSET); | |||
} | |||
@Test | |||
public void new_duplications_on_directory() throws Exception { | |||
Resource project = getComponent("new-duplications:src/main/xoo/duplicated_lines_with_other_dir1"); | |||
assertThat(project.getMeasure("new_ncloc").getVariation1()).isEqualTo(24d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(24d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(24d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(100d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(7d, DEFAULT_OFFSET); | |||
@@ -70,15 +70,15 @@ public class NewDuplicationsTest { | |||
@Test | |||
public void new_duplications_on_file() throws Exception { | |||
Resource project = getComponent("new-duplications:src/main/xoo/duplicated_lines_within_same_file/DuplicatedLinesInSameFile.xoo"); | |||
assertThat(project.getMeasure("new_ncloc").getVariation1()).isEqualTo(33d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_lines").getVariation1()).isEqualTo(41d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines").getVariation1()).isEqualTo(29d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(87.9d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_lines_density").getVariation1()).isEqualTo(70.7d, DEFAULT_OFFSET); | |||
assertThat(project.getMeasure("new_duplicated_blocks").getVariation1()).isEqualTo(2d, DEFAULT_OFFSET); | |||
} | |||
private static Resource getComponent(String key) { | |||
Resource component = orchestrator.getServer().getWsClient() | |||
.find(ResourceQuery.createForMetrics(key, "new_ncloc", "new_duplicated_lines", "new_duplicated_lines_density", "new_duplicated_blocks").setIncludeTrends(true)); | |||
.find(ResourceQuery.createForMetrics(key, "new_lines", "new_duplicated_lines", "new_duplicated_lines_density", "new_duplicated_blocks").setIncludeTrends(true)); | |||
assertThat(component).isNotNull(); | |||
return component; | |||
} |
@@ -35,7 +35,6 @@ import java.util.Set; | |||
import java.util.function.Function; | |||
import java.util.stream.Collectors; | |||
import java.util.stream.IntStream; | |||
import org.sonar.api.utils.KeyValueFormat; | |||
import org.sonar.server.computation.task.projectanalysis.component.Component; | |||
import org.sonar.server.computation.task.projectanalysis.component.PathAwareCrawler; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder; | |||
@@ -53,7 +52,6 @@ import org.sonar.server.computation.task.projectanalysis.formula.counter.IntVari | |||
import org.sonar.server.computation.task.projectanalysis.measure.Measure; | |||
import org.sonar.server.computation.task.projectanalysis.measure.MeasureRepository; | |||
import org.sonar.server.computation.task.projectanalysis.measure.MeasureVariations; | |||
import org.sonar.server.computation.task.projectanalysis.metric.Metric; | |||
import org.sonar.server.computation.task.projectanalysis.metric.MetricRepository; | |||
import org.sonar.server.computation.task.projectanalysis.period.Period; | |||
import org.sonar.server.computation.task.projectanalysis.period.PeriodsHolder; | |||
@@ -63,12 +61,10 @@ import org.sonar.server.computation.task.projectanalysis.scm.ScmInfoRepository; | |||
import org.sonar.server.computation.task.step.ComputationStep; | |||
import static java.util.stream.Collectors.toMap; | |||
import static org.sonar.api.measures.CoreMetrics.NCLOC_DATA_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_BLOCKS_DUPLICATED_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES_DENSITY_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_NCLOC_KEY; | |||
import static org.sonar.api.utils.KeyValueFormat.newIntegerConverter; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_LINES_KEY; | |||
/** | |||
* Computes measures on new code related to the size | |||
@@ -87,7 +83,7 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
this.periodsHolder = periodsHolder; | |||
this.metricRepository = metricRepository; | |||
this.measureRepository = measureRepository; | |||
this.duplicationFormula = new NewDuplicationFormula(measureRepository, metricRepository, scmInfoRepository, duplicationRepository); | |||
this.duplicationFormula = new NewDuplicationFormula(scmInfoRepository, duplicationRepository); | |||
} | |||
@Override | |||
@@ -105,20 +101,16 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
} | |||
private static class NewSizeCounter implements Counter<NewSizeCounter> { | |||
private final MeasureRepository measureRepository; | |||
private final DuplicationRepository duplicationRepository; | |||
private final ScmInfoRepository scmInfoRepository; | |||
private final Metric nclocDataMetric; | |||
private final IntVariationValue.Array newLines = IntVariationValue.newArray(); | |||
private final IntVariationValue.Array newDuplicatedLines = IntVariationValue.newArray(); | |||
private final IntVariationValue.Array newDuplicatedBlocks = IntVariationValue.newArray(); | |||
private NewSizeCounter(MeasureRepository measureRepository, MetricRepository metricRepository, DuplicationRepository duplicationRepository, | |||
private NewSizeCounter(DuplicationRepository duplicationRepository, | |||
ScmInfoRepository scmInfoRepository) { | |||
this.measureRepository = measureRepository; | |||
this.duplicationRepository = duplicationRepository; | |||
this.scmInfoRepository = scmInfoRepository; | |||
this.nclocDataMetric = metricRepository.getByKey(NCLOC_DATA_KEY); | |||
} | |||
@Override | |||
@@ -144,20 +136,14 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
return; | |||
} | |||
initNewLines(leaf, scmInfo.get(), context.getPeriods()); | |||
initNewLines(scmInfo.get(), context.getPeriods()); | |||
initNewDuplicated(leaf, scmInfo.get(), context.getPeriods()); | |||
} | |||
private void initNewLines(Component component, ScmInfo scmInfo, List<Period> periods) { | |||
Optional<Measure> nclocData = measureRepository.getRawMeasure(component, nclocDataMetric); | |||
if (!nclocData.isPresent()) { | |||
return; | |||
} | |||
nclocLineNumbers(nclocData.get()).stream() | |||
.map(scmInfo::getChangesetForLine) | |||
.forEach(changeset -> periods.stream() | |||
.filter(period -> isLineInPeriod(changeset, period)) | |||
.forEach(period -> newLines.increment(period, 1))); | |||
private void initNewLines(ScmInfo scmInfo, List<Period> periods) { | |||
scmInfo.getAllChangesets().forEach(changeset -> periods.stream() | |||
.filter(period -> isLineInPeriod(changeset, period)) | |||
.forEach(period -> newLines.increment(period, 1))); | |||
} | |||
private void initNewDuplicated(Component component, ScmInfo scmInfo, List<Period> periods) { | |||
@@ -178,21 +164,6 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
}); | |||
} | |||
/** | |||
* NCLOC_DATA contains Key-value pairs, where key - is a line number, and value - is an indicator of whether line | |||
* contains code (1) or not (0). | |||
* | |||
* This method parses the value of the NCLOC_DATA measure and return the line numbers which contain code. | |||
*/ | |||
private static List<Integer> nclocLineNumbers(Measure nclocDataMeasure) { | |||
Map<Integer, Integer> parsedNclocData = KeyValueFormat.parse(nclocDataMeasure.getData(), newIntegerConverter(), newIntegerConverter()); | |||
return parsedNclocData.entrySet() | |||
.stream() | |||
.filter(entry -> entry.getValue() == 1) | |||
.map(Map.Entry::getKey) | |||
.collect(Collectors.toList()); | |||
} | |||
private static boolean isLineInPeriod(Changeset changeset, Period period) { | |||
return changeset.getDate() > period.getSnapshotDate(); | |||
} | |||
@@ -237,29 +208,25 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
} | |||
private static final class NewDuplicationFormula implements Formula<NewSizeCounter> { | |||
private final MeasureRepository measureRepository; | |||
private final MetricRepository metricRepository; | |||
private final DuplicationRepository duplicationRepository; | |||
private final ScmInfoRepository scmInfoRepository; | |||
private NewDuplicationFormula(MeasureRepository measureRepository, MetricRepository metricRepository, ScmInfoRepository scmInfoRepository, | |||
private NewDuplicationFormula(ScmInfoRepository scmInfoRepository, | |||
DuplicationRepository duplicationRepository) { | |||
this.measureRepository = measureRepository; | |||
this.metricRepository = metricRepository; | |||
this.duplicationRepository = duplicationRepository; | |||
this.scmInfoRepository = scmInfoRepository; | |||
} | |||
@Override | |||
public NewSizeCounter createNewCounter() { | |||
return new NewSizeCounter(measureRepository, metricRepository, duplicationRepository, scmInfoRepository); | |||
return new NewSizeCounter(duplicationRepository, scmInfoRepository); | |||
} | |||
@Override | |||
public Optional<Measure> createMeasure(NewSizeCounter counter, CreateMeasureContext context) { | |||
String metricKey = context.getMetric().getKey(); | |||
switch (metricKey) { | |||
case NEW_NCLOC_KEY: | |||
case NEW_LINES_KEY: | |||
return createMeasure(counter.newLines.toMeasureVariations()); | |||
case NEW_DUPLICATED_LINES_KEY: | |||
return createMeasure(counter.newDuplicatedLines.toMeasureVariations()); | |||
@@ -298,7 +265,7 @@ public class NewSizeMeasuresStep implements ComputationStep { | |||
@Override | |||
public String[] getOutputMetricKeys() { | |||
return new String[] {NEW_NCLOC_KEY, NEW_DUPLICATED_LINES_KEY, NEW_DUPLICATED_LINES_DENSITY_KEY, NEW_BLOCKS_DUPLICATED_KEY}; | |||
return new String[] {NEW_LINES_KEY, NEW_DUPLICATED_LINES_KEY, NEW_DUPLICATED_LINES_DENSITY_KEY, NEW_BLOCKS_DUPLICATED_KEY}; | |||
} | |||
} | |||
} |
@@ -21,20 +21,13 @@ | |||
package org.sonar.server.computation.task.projectanalysis.step; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.function.Function; | |||
import java.util.stream.Collectors; | |||
import java.util.stream.IntStream; | |||
import javax.annotation.Nullable; | |||
import org.assertj.core.data.Offset; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.sonar.api.utils.KeyValueFormat; | |||
import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolderRule; | |||
import org.sonar.server.computation.task.projectanalysis.duplication.DuplicationRepositoryRule; | |||
import org.sonar.server.computation.task.projectanalysis.duplication.TextBlock; | |||
import org.sonar.server.computation.task.projectanalysis.measure.Measure; | |||
import org.sonar.server.computation.task.projectanalysis.measure.MeasureRepositoryRule; | |||
import org.sonar.server.computation.task.projectanalysis.measure.MeasureVariations; | |||
import org.sonar.server.computation.task.projectanalysis.metric.MetricRepositoryRule; | |||
@@ -46,16 +39,14 @@ import org.sonar.server.computation.task.projectanalysis.scm.ScmInfoRepositoryRu | |||
import static com.google.common.base.Preconditions.checkArgument; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.assertj.guava.api.Assertions.assertThat; | |||
import static org.sonar.api.measures.CoreMetrics.NCLOC_DATA; | |||
import static org.sonar.api.measures.CoreMetrics.NCLOC_DATA_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_BLOCKS_DUPLICATED; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_BLOCKS_DUPLICATED_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES_DENSITY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES_DENSITY_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_DUPLICATED_LINES_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_NCLOC; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_NCLOC_KEY; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_LINES; | |||
import static org.sonar.api.measures.CoreMetrics.NEW_LINES_KEY; | |||
import static org.sonar.api.utils.DateUtils.parseDate; | |||
import static org.sonar.server.computation.task.projectanalysis.component.Component.Type.DIRECTORY; | |||
import static org.sonar.server.computation.task.projectanalysis.component.Component.Type.FILE; | |||
@@ -113,8 +104,7 @@ public class NewSizeMeasuresStepTest { | |||
@Rule | |||
public MetricRepositoryRule metricRepository = new MetricRepositoryRule() | |||
.add(NCLOC_DATA) | |||
.add(NEW_NCLOC) | |||
.add(NEW_LINES) | |||
.add(NEW_DUPLICATED_LINES) | |||
.add(NEW_DUPLICATED_LINES_DENSITY) | |||
.add(NEW_BLOCKS_DUPLICATED); | |||
@@ -130,40 +120,34 @@ public class NewSizeMeasuresStepTest { | |||
@Test | |||
public void compute_new_lines() { | |||
setChangesets(FILE_1_REF, FILE_2_REF, FILE_3_REF, FILE_4_REF); | |||
setNclocsExcept(FILE_1_REF, 2, 4, 6); | |||
setNclocsExcept(FILE_2_REF); | |||
setNclocsExcept(FILE_3_REF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); | |||
setNclocsExcept(FILE_4_REF, 1, 2); | |||
setChangesets(FILE_1_REF, FILE_2_REF, FILE_4_REF); | |||
underTest.execute(); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_1_REF, NEW_NCLOC_KEY, 12 - 1 - 3); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_2_REF, NEW_NCLOC_KEY, 12 - 1); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_3_REF, NEW_NCLOC_KEY, 0); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_4_REF, NEW_NCLOC_KEY, 12 - 1 - 2); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(DIRECTORY_REF, NEW_NCLOC_KEY, 19); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(DIRECTORY_2_REF, NEW_NCLOC_KEY, 0); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(SUB_MODULE_1_REF, NEW_NCLOC_KEY, 19); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(SUB_MODULE_2_REF, NEW_NCLOC_KEY, 9); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(MODULE_REF, NEW_NCLOC_KEY, 28); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(ROOT_REF, NEW_NCLOC_KEY, 28); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_1_REF, NEW_LINES_KEY, 11); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_2_REF, NEW_LINES_KEY, 11); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_3_REF, NEW_LINES_KEY, 0); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(FILE_4_REF, NEW_LINES_KEY, 11); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(DIRECTORY_REF, NEW_LINES_KEY, 22); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(DIRECTORY_2_REF, NEW_LINES_KEY, 0); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(SUB_MODULE_1_REF, NEW_LINES_KEY, 22); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(SUB_MODULE_2_REF, NEW_LINES_KEY, 11); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(MODULE_REF, NEW_LINES_KEY, 33); | |||
assertRawMeasureValueOnPeriod2AndZeroOnPeriod5(ROOT_REF, NEW_LINES_KEY, 33); | |||
} | |||
@Test | |||
public void compute_new_lines_with_no_changeset() { | |||
setNclocsExcept(FILE_1_REF); | |||
underTest.execute(); | |||
assertComputedAndAggregatedToZeroInt(NEW_NCLOC_KEY); | |||
assertComputedAndAggregatedToZeroInt(NEW_LINES_KEY); | |||
} | |||
@Test | |||
public void compute_new_lines_with_no_ncloc_data() { | |||
underTest.execute(); | |||
assertComputedAndAggregatedToZeroInt(NEW_NCLOC_KEY); | |||
assertComputedAndAggregatedToZeroInt(NEW_LINES_KEY); | |||
} | |||
@Test | |||
@@ -343,47 +327,32 @@ public class NewSizeMeasuresStepTest { | |||
@Test | |||
public void compute_new_duplicated_lines_density() { | |||
setChangesets(FILE_1_REF, FILE_2_REF, FILE_3_REF, FILE_4_REF); | |||
setNclocsExcept(FILE_1_REF, 2, 4, 6); | |||
setNclocsExcept(FILE_2_REF); | |||
setNclocsExcept(FILE_3_REF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); | |||
setNclocsExcept(FILE_4_REF, 1, 2); | |||
setChangesets(FILE_1_REF, FILE_2_REF, FILE_4_REF); | |||
addDuplicatedBlock(FILE_1_REF, 2); | |||
addDuplicatedBlock(FILE_3_REF, 10); | |||
addDuplicatedBlock(FILE_4_REF, 12); | |||
underTest.execute(); | |||
assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 25d, null); | |||
assertRawMeasureValue(FILE_1_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 18.2d, null); | |||
assertRawMeasureValue(FILE_2_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 0d, null); | |||
assertNoRawMeasure(FILE_3_REF, NEW_DUPLICATED_LINES_DENSITY_KEY); | |||
assertRawMeasureValue(FILE_4_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 100d, null); | |||
assertRawMeasureValue(DIRECTORY_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 10.5d, null); | |||
assertRawMeasureValue(DIRECTORY_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 9.1d, null); | |||
assertNoRawMeasure(DIRECTORY_2_REF, NEW_DUPLICATED_LINES_DENSITY_KEY); | |||
assertRawMeasureValue(SUB_MODULE_1_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 10.5d,null); | |||
assertRawMeasureValue(SUB_MODULE_1_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 9.1d, null); | |||
assertRawMeasureValue(SUB_MODULE_2_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 100d, null); | |||
assertRawMeasureValue(MODULE_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 78.6d, null); | |||
assertRawMeasureValue(ROOT_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 78.6d, null); | |||
assertRawMeasureValue(MODULE_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 39.4d, null); | |||
assertRawMeasureValue(ROOT_REF, NEW_DUPLICATED_LINES_DENSITY_KEY, 39.4d, null); | |||
} | |||
@Test | |||
public void compute_no_new_duplicated_lines_density_when_no_lines() { | |||
setChangesets(FILE_1_REF, FILE_2_REF, FILE_3_REF, FILE_4_REF); | |||
underTest.execute(); | |||
assertNoRawMeasures(NEW_DUPLICATED_LINES_DENSITY_KEY); | |||
} | |||
private void setNclocsExcept(int componentRef, Integer... lineNumbersNotLineOfCode) { | |||
List<Integer> notLocNumbers = Arrays.asList(lineNumbersNotLineOfCode); | |||
Map<Integer, Integer> nclocData = IntStream.rangeClosed(1, 12) | |||
.filter(lineNumber -> !notLocNumbers.contains(lineNumber)) | |||
.boxed() | |||
.collect(Collectors.toMap(Function.identity(), lineNumber -> 1)); | |||
measureRepository.addRawMeasure(componentRef, NCLOC_DATA_KEY, Measure.newMeasureBuilder().create(KeyValueFormat.format(nclocData))); | |||
} | |||
/** | |||
* Adds duplication blocks of a single line (each line is specific to its block). | |||
* |
@@ -2503,8 +2503,8 @@ metric.new_major_violations.description=New Major issues | |||
metric.new_major_violations.name=New Major Issues | |||
metric.new_minor_violations.description=New Minor issues | |||
metric.new_minor_violations.name=New Minor Issues | |||
metric.new_ncloc.name=New Lines of Code | |||
metric.new_ncloc.description=New non commenting lines of code | |||
metric.new_lines.name=Lines on New Code | |||
metric.new_lines.description=Non commenting lines on new code | |||
metric.new_overall_branch_coverage.description=Condition coverage of new/changed code by all tests | |||
metric.new_overall_branch_coverage.name=Overall Condition Coverage on New Code | |||
metric.new_overall_conditions_to_cover.description=New conditions to cover by all tests |
@@ -132,12 +132,12 @@ public final class CoreMetrics { | |||
/** | |||
* @since 6.1 | |||
*/ | |||
public static final String NEW_NCLOC_KEY = "new_ncloc"; | |||
public static final String NEW_LINES_KEY = "new_lines"; | |||
/** | |||
* @since 6.1 | |||
*/ | |||
public static final Metric<Integer> NEW_NCLOC = new Metric.Builder(NEW_NCLOC_KEY, "New Lines of Code", Metric.ValueType.INT) | |||
.setDescription("New non commenting lines of code") | |||
public static final Metric<Integer> NEW_LINES = new Metric.Builder(NEW_LINES_KEY, "Lines on New Code", Metric.ValueType.INT) | |||
.setDescription("Non commenting lines on new code") | |||
.setDirection(Metric.DIRECTION_WORST) | |||
.setQualitative(false) | |||
.setDomain(DOMAIN_SIZE) |