]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11463 Fix directories metric computation
authorJulien HENRY <julien.henry@sonarsource.com>
Fri, 11 Jan 2019 10:02:36 +0000 (11:02 +0100)
committersonartech <sonartech@sonarsource.com>
Wed, 16 Jan 2019 08:43:12 +0000 (09:43 +0100)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/SizeMeasuresStep.java
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportSizeMeasuresStepTest.java

index a9b791a64d64b723d2c3234b219b0049b163872f..54dca2c7237c8015e5217b9b8157a0221b197a14 100644 (file)
@@ -108,15 +108,21 @@ public class SizeMeasuresStep implements ComputationStep {
 
     @Override
     public void visitDirectory(Component directory, Path<Counter> 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) {
index 7a629d17d3058c3bcb41267d5d513cf709535c62..3c528f849cfc6f8f329609b1a280acc5aa25bba1 100644 (file)
@@ -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