From 7218f5f2817a78f1447b098a3bd4b998c1e4584a Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Mon, 30 Jul 2018 17:30:21 +0200 Subject: [PATCH] SONAR-11077 display nb of analyzed components in CE logs --- .../projectanalysis/component/TreeRootHolder.java | 8 +++++++- .../component/TreeRootHolderImpl.java | 7 +++++++ .../step/BuildComponentTreeStep.java | 2 ++ .../component/TreeRootHolderImplTest.java | 13 +++++++++++++ .../component/TreeRootHolderRule.java | 7 +++++++ .../step/BuildComponentTreeStepTest.java | 5 ++++- 6 files changed, 40 insertions(+), 2 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolder.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolder.java index a1d6e7b321d..85785ed6332 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolder.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolder.java @@ -48,9 +48,15 @@ public interface TreeRootHolder { * * @throws IllegalStateException if the holder is empty (ie. there is no root yet) * @deprecated This method was introduced as a quick fix for SONAR-10781. Ultimately one should never manipulate component - * ref that doesn't exists in the scanner report + * ref that doesn't exist in the scanner report */ @Deprecated Optional getOptionalComponentByRef(int ref); + /** + * Number of components, including root. + * + * @throws IllegalStateException if the holder is empty (ie. there is no root yet) + */ + int getSize(); } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImpl.java index e4cf576fdb7..9598d93aaba 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImpl.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImpl.java @@ -63,6 +63,13 @@ public class TreeRootHolderImpl implements MutableTreeRootHolder { return Optional.ofNullable(componentsByRef.get(ref)); } + @Override + public int getSize() { + checkInitialized(); + ensureComponentByRefIsPopulated(); + return componentsByRef.size(); + } + private void ensureComponentByRefIsPopulated() { if (componentsByRef != null) { return; diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStep.java index 6d8174954bc..fee73596d14 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStep.java @@ -88,6 +88,8 @@ public class BuildComponentTreeStep implements ComputationStep { treeRootHolder.setRoot(project); analysisMetadataHolder.setBaseAnalysis(toAnalysis(baseAnalysis)); + + context.getStatistics().add("components", treeRootHolder.getSize()); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImplTest.java index ca8f50854f1..18c31306464 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImplTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderImplTest.java @@ -138,6 +138,19 @@ public class TreeRootHolderImplTest { assertThat(underTest.getRoot()).isSameAs(DUMB_PROJECT); } + @Test + public void getSize_throws_ISE_if_not_initialized() { + expectNotInitialized_ISE(); + + underTest.getSize(); + } + + @Test + public void getSize_counts_number_of_components() { + underTest.setRoot(SOME_REPORT_COMPONENT_TREE); + assertThat(underTest.getSize()).isEqualTo(4); + } + private void expectNotInitialized_ISE() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Holder has not been initialized yet"); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderRule.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderRule.java index 2bec414a8b3..49b3adc1674 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderRule.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/component/TreeRootHolderRule.java @@ -50,4 +50,11 @@ public class TreeRootHolderRule extends ExternalResource implements TreeRootHold public Optional getOptionalComponentByRef(int ref) { return delegate.getOptionalComponentByRef(ref); } + + @Override + public int getSize() { + return delegate.getSize(); + } + + } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java index f5b0b78d707..2ac9cdbab6d 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepTest.java @@ -147,7 +147,8 @@ public class BuildComponentTreeStepTest { reportReader.putComponent(component(DIR_REF_2, DIRECTORY, FILE_3_REF)); reportReader.putComponent(component(FILE_3_REF, FILE)); - underTest.execute(new TestComputationStepContext()); + TestComputationStepContext context = new TestComputationStepContext(); + underTest.execute(context); Component root = treeRootHolder.getRoot(); assertThat(root).isNotNull(); @@ -161,6 +162,8 @@ public class BuildComponentTreeStepTest { Component dir2 = module.getChildren().get(1); verifyComponent(dir2, Component.Type.DIRECTORY, DIR_REF_2, 1); verifyComponent(dir2.getChildren().iterator().next(), Component.Type.FILE, FILE_3_REF, 0); + + context.getStatistics().assertValue("components", 7); } @Test -- 2.39.5