aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Marion <steve.marion@sonarsource.com>2025-02-28 23:10:40 +0100
committerMatteo Mara <matteo.mara@sonarsource.com>2025-03-17 22:23:55 +0100
commit8dda5ad3e9824137ae6c273c69e7db70459fef16 (patch)
tree20fbc28d351b375fd4454dfd1ca3c9aa5373cb2d
parent390b8eddbe3cda5aa4e11866ed5865a4befa51f7 (diff)
downloadsonarqube-8dda5ad3e9824137ae6c273c69e7db70459fef16.tar.gz
sonarqube-8dda5ad3e9824137ae6c273c69e7db70459fef16.zip
SONAR-24514 Add CE processing of architecture graphs in analysis reports.
-rw-r--r--server/sonar-ce-common/src/main/java/org/sonar/ce/common/scanner/ScannerReportReader.java2
-rw-r--r--server/sonar-ce-common/src/testFixtures/java/org/sonar/ce/common/scanner/ScannerReportReaderRule.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java3
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java17
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java14
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scanner/ScannerReportReaderImpl.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java27
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java27
9 files changed, 65 insertions, 45 deletions
diff --git a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/scanner/ScannerReportReader.java b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/scanner/ScannerReportReader.java
index e69c297182f..459ba57009a 100644
--- a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/scanner/ScannerReportReader.java
+++ b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/scanner/ScannerReportReader.java
@@ -75,4 +75,6 @@ public interface ScannerReportReader {
CloseableIterator<ScannerReport.TelemetryEntry> readTelemetryEntries();
File readDependencyFilesZip();
+
+ CloseableIterator<ScannerReport.AnalysisData> readAnalysisData();
}
diff --git a/server/sonar-ce-common/src/testFixtures/java/org/sonar/ce/common/scanner/ScannerReportReaderRule.java b/server/sonar-ce-common/src/testFixtures/java/org/sonar/ce/common/scanner/ScannerReportReaderRule.java
index fa472ff4981..29e718bfe96 100644
--- a/server/sonar-ce-common/src/testFixtures/java/org/sonar/ce/common/scanner/ScannerReportReaderRule.java
+++ b/server/sonar-ce-common/src/testFixtures/java/org/sonar/ce/common/scanner/ScannerReportReaderRule.java
@@ -65,6 +65,7 @@ public class ScannerReportReaderRule implements TestRule, ScannerReportReader, A
private byte[] analysisCache;
private List<ScannerReport.TelemetryEntry> telemetryEntries = new ArrayList<>();
private File dependencyFilesZip;
+ private List<ScannerReport.AnalysisData> analysisData = new ArrayList<>();
@Override
public Statement apply(final Statement statement, Description description) {
@@ -341,6 +342,11 @@ public class ScannerReportReaderRule implements TestRule, ScannerReportReader, A
}
@Override
+ public CloseableIterator<ScannerReport.AnalysisData> readAnalysisData() {
+ return CloseableIterator.from(analysisData.iterator());
+ }
+
+ @Override
public File readDependencyFilesZip() {
if (dependencyFilesZip == null) {
return null;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java
index 8daa288eb49..210c1e5ff76 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java
@@ -22,6 +22,7 @@ package org.sonar.ce.task.projectanalysis.measure;
import org.sonar.api.ExtensionPoint;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
+import org.sonar.ce.task.projectanalysis.analysis.Branch;
import org.sonar.ce.task.projectanalysis.component.Component;
/**
@@ -50,6 +51,8 @@ public interface PostMeasuresComputationCheck {
*/
String getProjectUuid();
+ Branch getBranch();
+
/**
* Return the ncloc computed for the current analysis
*/
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java
index a5a998b685c..92e9d3a170e 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java
@@ -23,12 +23,12 @@ import java.util.Optional;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
+import org.sonar.ce.task.projectanalysis.analysis.Branch;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolder;
import org.sonar.ce.task.projectanalysis.metric.Metric;
import org.sonar.ce.task.projectanalysis.metric.MetricRepository;
import org.sonar.ce.task.step.ComputationStep;
-import org.springframework.beans.factory.annotation.Autowired;
/**
* Execute {@link PostMeasuresComputationCheck} instances in no specific order.
@@ -44,7 +44,6 @@ public class PostMeasuresComputationChecksStep implements ComputationStep {
private final AnalysisMetadataHolder analysisMetadataHolder;
private final PostMeasuresComputationCheck[] extensions;
- @Autowired(required = false)
public PostMeasuresComputationChecksStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository,
AnalysisMetadataHolder analysisMetadataHolder, PostMeasuresComputationCheck[] extensions) {
this.treeRootHolder = treeRootHolder;
@@ -54,15 +53,6 @@ public class PostMeasuresComputationChecksStep implements ComputationStep {
this.extensions = extensions;
}
- /**
- * Used when zero {@link PostMeasuresComputationCheck} are registered into container.
- */
- @Autowired(required = false)
- public PostMeasuresComputationChecksStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository,
- AnalysisMetadataHolder analysisMetadataHolder) {
- this(treeRootHolder, metricRepository, measureRepository, analysisMetadataHolder, new PostMeasuresComputationCheck[0]);
- }
-
@Override
public void execute(ComputationStep.Context context) {
PostMeasuresComputationCheck.Context extensionContext = new ContextImpl();
@@ -84,6 +74,11 @@ public class PostMeasuresComputationChecksStep implements ComputationStep {
}
@Override
+ public Branch getBranch() {
+ return analysisMetadataHolder.getBranch();
+ }
+
+ @Override
public int getNcloc() {
Metric nclocMetric = metricRepository.getByKey(CoreMetrics.NCLOC_KEY);
Optional<Measure> nclocMeasure = measureRepository.getRawMeasure(treeRootHolder.getRoot(), nclocMetric);
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java
index 68e1f8e56a4..d72421f7037 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationCheck.java
@@ -22,8 +22,10 @@ package org.sonar.ce.task.projectanalysis.measure;
import org.sonar.api.ExtensionPoint;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Configuration;
+import org.sonar.ce.common.scanner.ScannerReportReader;
import org.sonar.ce.task.projectanalysis.analysis.Branch;
+
/**
* Extension point that is called during processing of a task
* by {@link PreMeasuresComputationChecksStep}.
@@ -49,6 +51,8 @@ public interface PreMeasuresComputationCheck {
Branch getBranch();
Configuration getConfiguration();
+
+ ScannerReportReader getReportReader();
}
class PreMeasuresComputationCheckException extends RuntimeException {
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java
index b59dcd63cba..1ea17875a8f 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStep.java
@@ -19,8 +19,11 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
+import static org.sonar.ce.task.projectanalysis.measure.PreMeasuresComputationCheck.PreMeasuresComputationCheckException;
+
import org.sonar.api.config.Configuration;
import org.sonar.api.utils.System2;
+import org.sonar.ce.common.scanner.ScannerReportReader;
import org.sonar.ce.task.log.CeTaskMessages;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
import org.sonar.ce.task.projectanalysis.analysis.Branch;
@@ -28,8 +31,6 @@ import org.sonar.ce.task.projectanalysis.component.ConfigurationRepository;
import org.sonar.ce.task.step.ComputationStep;
import org.sonar.db.dismissmessage.MessageType;
-import static org.sonar.ce.task.projectanalysis.measure.PreMeasuresComputationCheck.PreMeasuresComputationCheckException;
-
/**
* Execute {@link PreMeasuresComputationCheck} instances in no specific order.
* If an extension fails (throws an exception), consecutive extensions
@@ -41,15 +42,17 @@ public class PreMeasuresComputationChecksStep implements ComputationStep {
private final PreMeasuresComputationCheck[] extensions;
private final CeTaskMessages ceTaskMessages;
private final ConfigurationRepository configurationRepository;
+ private final ScannerReportReader reportReader;
public PreMeasuresComputationChecksStep(
AnalysisMetadataHolder analysisMetadataHolder, CeTaskMessages ceTaskMessages,
- ConfigurationRepository configurationRepository, PreMeasuresComputationCheck... extensions) {
+ ConfigurationRepository configurationRepository, ScannerReportReader reportReader, PreMeasuresComputationCheck... extensions) {
this.analysisMetadataHolder = analysisMetadataHolder;
this.ceTaskMessages = ceTaskMessages;
this.configurationRepository = configurationRepository;
this.extensions = extensions;
+ this.reportReader = reportReader;
}
@Override
@@ -86,5 +89,10 @@ public class PreMeasuresComputationChecksStep implements ComputationStep {
return configurationRepository.getConfiguration();
}
+ @Override
+ public ScannerReportReader getReportReader() {
+ return reportReader;
+ }
+
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scanner/ScannerReportReaderImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scanner/ScannerReportReaderImpl.java
index ed966607bce..5f2627c31a0 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scanner/ScannerReportReaderImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scanner/ScannerReportReaderImpl.java
@@ -19,6 +19,8 @@
*/
package org.sonar.ce.task.projectanalysis.scanner;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -36,8 +38,6 @@ import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.LineSgnificantCode;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
public class ScannerReportReaderImpl implements ScannerReportReader {
private final ScannerReportDirectoryHolder scannerReportDirectoryHolder;
@@ -239,4 +239,10 @@ public class ScannerReportReaderImpl implements ScannerReportReader {
ensureInitialized();
return delegate.readDependencyFilesZip();
}
+
+ @Override
+ public CloseableIterator<ScannerReport.AnalysisData> readAnalysisData() {
+ ensureInitialized();
+ return delegate.readAnalysisData();
+ }
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java
index 7f2e8a8a929..701ec610b66 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java
@@ -19,18 +19,6 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.InOrder;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
-import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
-import org.sonar.ce.task.projectanalysis.measure.PostMeasuresComputationCheck.Context;
-import org.sonar.ce.task.projectanalysis.metric.MetricRepositoryRule;
-import org.sonar.ce.task.step.TestComputationStepContext;
-import org.sonar.server.project.Project;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
@@ -43,6 +31,18 @@ import static org.sonar.api.measures.CoreMetrics.NCLOC;
import static org.sonar.ce.task.projectanalysis.component.ReportComponent.DUMB_PROJECT;
import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
+import org.sonar.api.measures.CoreMetrics;
+import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
+import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
+import org.sonar.ce.task.projectanalysis.measure.PostMeasuresComputationCheck.Context;
+import org.sonar.ce.task.projectanalysis.metric.MetricRepositoryRule;
+import org.sonar.ce.task.step.TestComputationStepContext;
+import org.sonar.server.project.Project;
+
public class PostMeasuresComputationChecksStepTest {
@Rule
@@ -131,9 +131,6 @@ public class PostMeasuresComputationChecksStepTest {
}
private PostMeasuresComputationChecksStep newStep(PostMeasuresComputationCheck... postMeasuresComputationChecks) {
- if (postMeasuresComputationChecks.length == 0) {
- return new PostMeasuresComputationChecksStep(treeRootHolder, metricRepository, measureRepository, analysisMetadataHolder);
- }
return new PostMeasuresComputationChecksStep(treeRootHolder, metricRepository, measureRepository, analysisMetadataHolder, postMeasuresComputationChecks);
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java
index c0840838bb2..b894be71e53 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PreMeasuresComputationChecksStepTest.java
@@ -19,10 +19,21 @@
*/
package org.sonar.ce.task.projectanalysis.measure;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.sonar.ce.task.projectanalysis.measure.PreMeasuresComputationCheck.PreMeasuresComputationCheckException;
+import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
+import org.sonar.ce.common.scanner.ScannerReportReader;
import org.sonar.ce.task.log.CeTaskMessages;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule;
import org.sonar.ce.task.projectanalysis.analysis.Branch;
@@ -32,20 +43,11 @@ import org.sonar.ce.task.step.TestComputationStepContext;
import org.sonar.db.component.BranchType;
import org.sonar.server.project.Project;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.sonar.ce.task.projectanalysis.measure.PreMeasuresComputationCheck.PreMeasuresComputationCheckException;
-import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
-
public class PreMeasuresComputationChecksStepTest {
public AnalysisMetadataHolderRule analysisMetadataHolder = mock();
public CeTaskMessages ceTaskMessages = mock();
+ public ScannerReportReader reportReader = mock();
public ConfigurationRepository configurationRepository = mock();
@Before
@@ -121,10 +123,7 @@ public class PreMeasuresComputationChecksStepTest {
}
private PreMeasuresComputationChecksStep newStep(PreMeasuresComputationCheck... preMeasuresComputationChecks) {
- if (preMeasuresComputationChecks.length == 0) {
- return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, configurationRepository);
- }
- return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, configurationRepository, preMeasuresComputationChecks);
+ return new PreMeasuresComputationChecksStep(analysisMetadataHolder, ceTaskMessages, configurationRepository, reportReader, preMeasuresComputationChecks);
}
private void mockBranch(String branchName) {