From: Julien HENRY Date: Fri, 11 Jan 2019 10:02:36 +0000 (+0100) Subject: SONAR-11463 Fix directories metric computation X-Git-Tag: 7.6~43 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e4debe10e44e22f43b00357692eeaae1e13ec32e;p=sonarqube.git SONAR-11463 Fix directories metric computation --- diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SizeMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SizeMeasuresStep.java index a9b791a64d6..54dca2c7237 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SizeMeasuresStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SizeMeasuresStep.java @@ -108,15 +108,21 @@ public class SizeMeasuresStep implements ComputationStep { @Override public void visitDirectory(Component directory, Path path) { - int fileCount = path.current().files; - if (fileCount > 0) { - measureRepository.add(directory, directoryMetric, newMeasureBuilder().create(1)); - measureRepository.add(directory, fileMetric, newMeasureBuilder().create(fileCount)); - measureRepository.add(directory, linesMetric, newMeasureBuilder().create(path.current().lines)); + int mainfileCount = path.current().files; + path.parent().directories += path.current().directories; + if (mainfileCount > 0 || path.current().directories > 0) { path.parent().directories += 1; - path.parent().files += fileCount; + } + if (mainfileCount > 0) { + measureRepository.add(directory, fileMetric, newMeasureBuilder().create(mainfileCount)); + measureRepository.add(directory, linesMetric, newMeasureBuilder().create(path.current().lines)); + path.parent().files += mainfileCount; path.parent().lines += path.current().lines; } + int mainDirectoryCount = path.current().directories; + if (mainDirectoryCount > 0) { + measureRepository.add(directory, directoryMetric, newMeasureBuilder().create(mainDirectoryCount)); + } } private void createMeasures(Component directory, Counter counter) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportSizeMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportSizeMeasuresStepTest.java index 7a629d17d30..3c528f849cf 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportSizeMeasuresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportSizeMeasuresStepTest.java @@ -58,11 +58,18 @@ public class ReportSizeMeasuresStepTest { private static final int DIRECTORY_1_REF = 1234; private static final int DIRECTORY_2_REF = 1235; private static final int DIRECTORY_3_REF = 1236; + private static final int DIRECTORY_4_REF = 1237; + private static final int DIRECTORY_4_1_REF = 1238; + private static final int DIRECTORY_4_2_REF = 1239; + private static final int DIRECTORY_4_3_REF = 1240; private static final int FILE_1_REF = 12341; private static final int FILE_2_REF = 12343; private static final int FILE_3_REF = 12351; + private static final int FILE_4_REF = 12371; + private static final int FILE_5_REF = 12372; private static final int UNIT_TEST_1_REF = 12352; private static final int UNIT_TEST_2_REF = 12361; + private static final int UNIT_TEST_3_REF = 12362; private static final Integer NO_METRIC = null; @Rule @@ -82,8 +89,21 @@ public class ReportSizeMeasuresStepTest { builder(DIRECTORY, DIRECTORY_3_REF) .addChildren( builder(FILE, UNIT_TEST_2_REF).setFileAttributes(new FileAttributes(true, LANGUAGE_DOES_NOT_MATTER_HERE, 10)).build()) - .build()) - .build()); + .build(), + builder(DIRECTORY, DIRECTORY_4_REF) + .addChildren( + builder(DIRECTORY, DIRECTORY_4_1_REF) + .addChildren( + builder(FILE, FILE_4_REF).setFileAttributes(new FileAttributes(false, LANGUAGE_DOES_NOT_MATTER_HERE, 9)).build()).build(), + builder(DIRECTORY, DIRECTORY_4_2_REF) + .addChildren( + builder(FILE, FILE_5_REF).setFileAttributes(new FileAttributes(false, LANGUAGE_DOES_NOT_MATTER_HERE, 5)).build()).build(), + builder(DIRECTORY, DIRECTORY_4_3_REF) + .addChildren( + builder(FILE, UNIT_TEST_3_REF).setFileAttributes(new FileAttributes(true, LANGUAGE_DOES_NOT_MATTER_HERE, 6)).build()).build() + ).build() + ).build()); + @Rule public MetricRepositoryRule metricRepository = new MetricRepositoryRule() .add(CoreMetrics.FILES) @@ -107,12 +127,15 @@ public class ReportSizeMeasuresStepTest { verifyMeasuresOnFile(FILE_1_REF, 1, 1); verifyMeasuresOnFile(FILE_2_REF, 2, 1); verifyMeasuresOnFile(FILE_3_REF, 7, 1); + verifyMeasuresOnFile(FILE_4_REF, 9, 1); + verifyMeasuresOnFile(FILE_5_REF, 5, 1); verifyNoMeasure(UNIT_TEST_1_REF); verifyNoMeasure(UNIT_TEST_2_REF); - verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, 1); - verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, 1); + verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, NO_METRIC); + verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, NO_METRIC); verifyMeasuresOnOtherComponent(DIRECTORY_3_REF, NO_METRIC, NO_METRIC, NO_METRIC); - verifyMeasuresOnOtherComponent(ROOT_REF, 10, 3, 2); + verifyMeasuresOnOtherComponent(DIRECTORY_4_REF, 14, 2, 2); + verifyMeasuresOnOtherComponent(ROOT_REF, 24, 5, 5); } @Test @@ -135,12 +158,15 @@ public class ReportSizeMeasuresStepTest { verifyMeasuresOnFile(FILE_1_REF, 1, 1); verifyMeasuresOnFile(FILE_2_REF, 2, 1); verifyMeasuresOnFile(FILE_3_REF, 7, 1); + verifyMeasuresOnFile(FILE_4_REF, 9, 1); + verifyMeasuresOnFile(FILE_5_REF, 5, 1); verifyNoMeasure(UNIT_TEST_1_REF); verifyNoMeasure(UNIT_TEST_2_REF); - verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, 1, entryOf(metricKey, newMeasureBuilder().create(16))); - verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, 1, entryOf(metricKey, newMeasureBuilder().create(3))); + verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, NO_METRIC, entryOf(metricKey, newMeasureBuilder().create(16))); + verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, NO_METRIC, entryOf(metricKey, newMeasureBuilder().create(3))); verifyMeasuresOnOtherComponent(DIRECTORY_3_REF, NO_METRIC, NO_METRIC, NO_METRIC); - verifyMeasuresOnOtherComponent(ROOT_REF, 10, 3, 2, entryOf(metricKey, newMeasureBuilder().create(19))); + verifyMeasuresOnOtherComponent(DIRECTORY_4_REF, 14, 2, 2); + verifyMeasuresOnOtherComponent(ROOT_REF, 24, 5, 5, entryOf(metricKey, newMeasureBuilder().create(19))); } private void verifyTwoMeasureAggregation(String metric1Key, String metric2Key) { @@ -151,6 +177,8 @@ public class ReportSizeMeasuresStepTest { // FILE_3_REF has no measure at all // UNIT_TEST_1_REF has no metric1 measureRepository.addRawMeasure(UNIT_TEST_1_REF, metric2Key, newMeasureBuilder().create(90)); + measureRepository.addRawMeasure(FILE_4_REF, metric1Key, newMeasureBuilder().create(2)); + measureRepository.addRawMeasure(FILE_4_REF, metric2Key, newMeasureBuilder().create(3)); underTest.execute(new TestComputationStepContext()); @@ -159,16 +187,16 @@ public class ReportSizeMeasuresStepTest { verifyMeasuresOnFile(FILE_3_REF, 7, 1); verifyNoMeasure(UNIT_TEST_1_REF); verifyNoMeasure(UNIT_TEST_2_REF); - verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, 1, + verifyMeasuresOnOtherComponent(DIRECTORY_1_REF, 3, 2, NO_METRIC, entryOf(metric1Key, newMeasureBuilder().create(7)), entryOf(metric2Key, newMeasureBuilder().create(10))); - verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, 1, + verifyMeasuresOnOtherComponent(DIRECTORY_2_REF, 7, 1, NO_METRIC, entryOf(metric2Key, newMeasureBuilder().create(90))); MeasureRepoEntry[] subModuleAndAboveEntries = { - entryOf(metric1Key, newMeasureBuilder().create(7)), - entryOf(metric2Key, newMeasureBuilder().create(100)) + entryOf(metric1Key, newMeasureBuilder().create(9)), + entryOf(metric2Key, newMeasureBuilder().create(103)) }; verifyMeasuresOnOtherComponent(DIRECTORY_3_REF, NO_METRIC, NO_METRIC, NO_METRIC); - verifyMeasuresOnOtherComponent(ROOT_REF, 10, 3, 2, subModuleAndAboveEntries); + verifyMeasuresOnOtherComponent(ROOT_REF, 24, 5, 5, subModuleAndAboveEntries); } @Test