aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-ce-task-projectanalysis
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2022-02-01 15:16:25 -0600
committersonartech <sonartech@sonarsource.com>2022-02-22 20:02:46 +0000
commit60c1a4038e041a342dda9810e6fd761d66b01bdb (patch)
tree0e76b4252e4d7d257cf4ddcb6f081996bb1e03ab /server/sonar-ce-task-projectanalysis
parent9694d4113bf401b84e86e0223dbea8f5339388d8 (diff)
downloadsonarqube-60c1a4038e041a342dda9810e6fd761d66b01bdb.tar.gz
sonarqube-60c1a4038e041a342dda9810e6fd761d66b01bdb.zip
SONAR-15994 Migrate Sonarqube IOC framework from Pico to Spring
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
-rw-r--r--server/sonar-ce-task-projectanalysis/build.gradle1
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java8
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchLoader.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactory.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactoryImpl.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/CrossProjectDuplicationStatusHolderImpl.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java5
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProvider.java57
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ProtoIssueCache.java7
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMerger.java3
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/language/LanguageRepositoryImpl.java3
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStep.java3
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/metric/MetricRepositoryImpl.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/AbstractComputationSteps.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/CoverageMeasuresStep.java21
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadMeasureComputersStep.java11
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/TriggerViewRefreshStep.java7
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessor.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessor.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/ReportTaskProcessor.java26
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulator.java4
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/taskprocessor/ProjectExportTaskProcessor.java6
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectExportDumpFSImpl.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectImportDumpFSImpl.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulatorTest.java93
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProviderTest.java67
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportComputationStepsTest.java46
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsCoverageMeasuresStepTest.java2
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskModuleTest.java9
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessorTest.java12
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessorTest.java10
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportComputationStepsTest.java44
-rw-r--r--server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulatorTest.java72
-rw-r--r--server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/task/ListTaskContainer.java80
37 files changed, 309 insertions, 346 deletions
diff --git a/server/sonar-ce-task-projectanalysis/build.gradle b/server/sonar-ce-task-projectanalysis/build.gradle
index b6d0b390b0d..bca65c795f6 100644
--- a/server/sonar-ce-task-projectanalysis/build.gradle
+++ b/server/sonar-ce-task-projectanalysis/build.gradle
@@ -29,7 +29,6 @@ dependencies {
compile 'com.google.protobuf:protobuf-java'
compile 'com.googlecode.java-diff-utils:diffutils'
compile 'org.mybatis:mybatis'
- compile 'org.picocontainer:picocontainer'
compile project(':sonar-core')
compile project(':server:sonar-ce-common')
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java
index 3ede8d76372..b7ec255e4b0 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java
@@ -72,14 +72,6 @@ public class PostProjectAnalysisTasksExecutor implements ComputationStepExecutor
private final PostProjectAnalysisTask[] postProjectAnalysisTasks;
private final BatchReportReader reportReader;
- /**
- * Constructor used by Pico when there is no {@link PostProjectAnalysisTask} in the container.
- */
- public PostProjectAnalysisTasksExecutor(org.sonar.ce.task.CeTask ceTask, AnalysisMetadataHolder analysisMetadataHolder,
- QualityGateHolder qualityGateHolder, QualityGateStatusHolder qualityGateStatusHolder, BatchReportReader reportReader) {
- this(ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader, null);
- }
-
public PostProjectAnalysisTasksExecutor(org.sonar.ce.task.CeTask ceTask, AnalysisMetadataHolder analysisMetadataHolder, QualityGateHolder qualityGateHolder,
QualityGateStatusHolder qualityGateStatusHolder, BatchReportReader reportReader, @Nullable PostProjectAnalysisTask[] postProjectAnalysisTasks) {
this.analysisMetadataHolder = analysisMetadataHolder;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchLoader.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchLoader.java
index b9253ca5213..3eb24b243ac 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchLoader.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/BranchLoader.java
@@ -19,13 +19,14 @@
*/
package org.sonar.ce.task.projectanalysis.component;
-import javax.annotation.Nullable;
import org.sonar.api.utils.MessageException;
import org.sonar.ce.task.projectanalysis.analysis.MutableAnalysisMetadataHolder;
import org.sonar.scanner.protocol.output.ScannerReport;
-
import static org.sonar.scanner.protocol.output.ScannerReport.Metadata.BranchType.UNSET;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
public class BranchLoader {
private final MutableAnalysisMetadataHolder metadataHolder;
private final BranchLoaderDelegate delegate;
@@ -34,6 +35,7 @@ public class BranchLoader {
this(metadataHolder, null);
}
+ @Inject
public BranchLoader(MutableAnalysisMetadataHolder metadataHolder, @Nullable BranchLoaderDelegate delegate) {
this.metadataHolder = metadataHolder;
this.delegate = delegate;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactory.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactory.java
index 12638017f9f..7ceb456ab12 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactory.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactory.java
@@ -22,9 +22,9 @@ package org.sonar.ce.task.projectanalysis.container;
import javax.annotation.Nullable;
import org.sonar.ce.task.CeTask;
import org.sonar.ce.task.container.TaskContainer;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
public interface ContainerFactory {
- TaskContainer create(ComponentContainer parent, CeTask task, @Nullable ReportAnalysisComponentProvider[] componentProviders);
+ TaskContainer create(SpringComponentContainer parent, CeTask task, @Nullable ReportAnalysisComponentProvider[] componentProviders);
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactoryImpl.java
index c6635e05877..7e58e1b22ed 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactoryImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ContainerFactoryImpl.java
@@ -23,11 +23,11 @@ import javax.annotation.Nullable;
import org.sonar.ce.task.CeTask;
import org.sonar.ce.task.container.TaskContainer;
import org.sonar.ce.task.container.TaskContainerImpl;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
public class ContainerFactoryImpl implements ContainerFactory {
@Override
- public TaskContainer create(ComponentContainer parent, CeTask task, @Nullable ReportAnalysisComponentProvider[] componentProviders) {
+ public TaskContainer create(SpringComponentContainer parent, CeTask task, @Nullable ReportAnalysisComponentProvider[] componentProviders) {
return new TaskContainerImpl(parent, new ProjectAnalysisTaskContainerPopulator(task, componentProviders));
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
index 4764a7a9446..faa28a22ba6 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulator.java
@@ -165,15 +165,15 @@ public final class ProjectAnalysisTaskContainerPopulator implements ContainerPop
container.add(SettingsLoader.class);
container.add(task);
container.add(steps);
- container.addSingletons(componentClasses());
+ container.add(componentClasses());
for (ReportAnalysisComponentProvider componentProvider : componentProviders) {
- container.addSingletons(componentProvider.getComponents());
+ container.add(componentProvider.getComponents());
}
- container.addSingletons(steps.orderedStepClasses());
+ container.add(steps.orderedStepClasses());
}
/**
- * List of all objects to be injected in the picocontainer dedicated to computation stack.
+ * List of all objects to be injected in the ioc container dedicated to computation stack.
* Does not contain the steps declared in {@link ReportComputationSteps#orderedStepClasses()}.
*/
private static List<Object> componentClasses() {
@@ -191,7 +191,7 @@ public final class ProjectAnalysisTaskContainerPopulator implements ContainerPop
new ComputationTempFolderProvider(),
ReportModulesPath.class,
- MetricModule.class,
+ new MetricModule(),
// holders
AnalysisMetadataHolderImpl.class,
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/CrossProjectDuplicationStatusHolderImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/CrossProjectDuplicationStatusHolderImpl.java
index 3ba3eec0daf..0091e343184 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/CrossProjectDuplicationStatusHolderImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/CrossProjectDuplicationStatusHolderImpl.java
@@ -20,7 +20,7 @@
package org.sonar.ce.task.projectanalysis.duplication;
import javax.annotation.CheckForNull;
-import org.picocontainer.Startable;
+import org.sonar.api.Startable;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java
index f180f5a5bbb..103ef9dd4ce 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java
@@ -26,6 +26,7 @@ import java.util.Optional;
import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+import javax.inject.Inject;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.PathAwareCrawler;
import org.sonar.ce.task.projectanalysis.component.TreeRootHolder;
@@ -53,6 +54,7 @@ public class DuplicationMeasures {
protected final MeasureRepository measureRepository;
private final DuplicationRepository duplicationRepository;
+ @Inject
public DuplicationMeasures(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository,
@Nullable DuplicationRepository duplicationRepository) {
this.treeRootHolder = treeRootHolder;
@@ -63,9 +65,6 @@ public class DuplicationMeasures {
this.formulas = List.of(new DuplicationFormula());
}
- /**
- * Constructor used by Pico in Views where no DuplicationRepository is available.
- */
public DuplicationMeasures(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository) {
this(treeRootHolder, metricRepository, measureRepository, null);
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProvider.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProvider.java
index 49487780cf3..90ef49f2328 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProvider.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProvider.java
@@ -21,64 +21,27 @@ package org.sonar.ce.task.projectanalysis.filesystem;
import java.io.File;
import java.io.IOException;
-import javax.annotation.CheckForNull;
import org.apache.commons.io.FileUtils;
-import org.picocontainer.ComponentLifecycle;
-import org.picocontainer.PicoContainer;
-import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.impl.utils.DefaultTempFolder;
import org.sonar.api.utils.TempFolder;
import org.sonar.server.platform.ServerFileSystem;
+import org.springframework.context.annotation.Bean;
/**
* Provides a TempFolder instance pointing to a directory dedicated to the processing of a specific item.
* This directory will be deleted at the end of the processing.
* This directory is located in the "ce" directory of the temp directory of the SonarQube instance.
*/
-public class ComputationTempFolderProvider extends ProviderAdapter implements ComponentLifecycle<TempFolder> {
- private boolean started = false;
- @CheckForNull
- private DefaultTempFolder tempFolder = null;
-
+public class ComputationTempFolderProvider {
+ @Bean("ComputationTempFolder")
public TempFolder provide(ServerFileSystem fs) {
- if (this.tempFolder == null) {
- File tempDir = new File(fs.getTempDir(), "ce");
- try {
- FileUtils.forceMkdir(tempDir);
- } catch (IOException e) {
- throw new IllegalStateException("Unable to create computation temp directory " + tempDir, e);
- }
- File computationDir = new DefaultTempFolder(tempDir).newDir();
- this.tempFolder = new DefaultTempFolder(computationDir, true);
+ File tempDir = new File(fs.getTempDir(), "ce");
+ try {
+ FileUtils.forceMkdir(tempDir);
+ } catch (IOException e) {
+ throw new IllegalStateException("Unable to create computation temp directory " + tempDir, e);
}
- return this.tempFolder;
- }
-
- @Override
- public void start(PicoContainer container) {
- this.started = true;
+ File computationDir = new DefaultTempFolder(tempDir).newDir();
+ return new DefaultTempFolder(computationDir, true);
}
-
- @Override
- public void stop(PicoContainer container) {
- if (tempFolder != null) {
- tempFolder.stop();
- }
- }
-
- @Override
- public void dispose(PicoContainer container) {
- // nothing to do
- }
-
- @Override
- public boolean componentHasLifecycle() {
- return true;
- }
-
- @Override
- public boolean isStarted() {
- return started;
- }
-
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java
index 60fa00dea49..b57b06cbd00 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/IssueLifecycle.java
@@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import java.util.Date;
import java.util.Optional;
+import javax.inject.Inject;
import org.sonar.api.issue.Issue;
import org.sonar.api.rules.RuleType;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
@@ -54,6 +55,7 @@ public class IssueLifecycle {
private final DebtCalculator debtCalculator;
private final AnalysisMetadataHolder analysisMetadataHolder;
+ @Inject
public IssueLifecycle(AnalysisMetadataHolder analysisMetadataHolder, IssueWorkflow workflow, IssueFieldsSetter updater, DebtCalculator debtCalculator,
RuleRepository ruleRepository) {
this(analysisMetadataHolder, IssueChangeContext.createScan(new Date(analysisMetadataHolder.getAnalysisDate())), workflow, updater, debtCalculator, ruleRepository);
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ProtoIssueCache.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ProtoIssueCache.java
index 38a5c6373f4..c2e460dd80d 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ProtoIssueCache.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ProtoIssueCache.java
@@ -19,18 +19,19 @@
*/
package org.sonar.ce.task.projectanalysis.issue;
-import java.io.File;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.TempFolder;
import org.sonar.ce.task.projectanalysis.util.cache.ProtobufIssueDiskCache;
+import javax.inject.Inject;
+import java.io.File;
+
/**
* Cache of all the issues involved in the analysis. Their state is as it will be
* persisted in database (after issue tracking, auto-assignment, ...)
*/
public class ProtoIssueCache extends ProtobufIssueDiskCache {
-
- // this constructor is used by picocontainer
+ @Inject
public ProtoIssueCache(TempFolder tempFolder, System2 system2) {
super(tempFolder.newFile("issues", ".dat"), system2);
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMerger.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMerger.java
index cb9310473b4..2d4492bd066 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMerger.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/SiblingsIssueMerger.java
@@ -25,16 +25,19 @@ import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.tracking.SimpleTracker;
import org.sonar.core.issue.tracking.Tracking;
+import org.springframework.beans.factory.annotation.Autowired;
public class SiblingsIssueMerger {
private final SiblingsIssuesLoader siblingsIssuesLoader;
private final SimpleTracker<DefaultIssue, SiblingIssue> tracker;
private final IssueLifecycle issueLifecycle;
+ @Autowired(required = false)
public SiblingsIssueMerger(SiblingsIssuesLoader resolvedSiblingsIssuesLoader, IssueLifecycle issueLifecycle) {
this(resolvedSiblingsIssuesLoader, new SimpleTracker<>(), issueLifecycle);
}
+ @Autowired(required = false)
public SiblingsIssueMerger(SiblingsIssuesLoader siblingsIssuesLoader, SimpleTracker<DefaultIssue, SiblingIssue> tracker, IssueLifecycle issueLifecycle) {
this.siblingsIssuesLoader = siblingsIssuesLoader;
this.tracker = tracker;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/language/LanguageRepositoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/language/LanguageRepositoryImpl.java
index 544766e1026..33a36e45fa4 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/language/LanguageRepositoryImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/language/LanguageRepositoryImpl.java
@@ -25,6 +25,7 @@ import java.util.Map;
import java.util.Optional;
import javax.annotation.Nonnull;
import org.sonar.api.resources.Language;
+import org.springframework.beans.factory.annotation.Autowired;
import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.Iterables.filter;
@@ -38,10 +39,12 @@ public class LanguageRepositoryImpl implements LanguageRepository {
private final Map<String, Language> languagesByKey;
+ @Autowired(required = false)
public LanguageRepositoryImpl() {
this.languagesByKey = Collections.emptyMap();
}
+ @Autowired(required = false)
public LanguageRepositoryImpl(Language... languages) {
this.languagesByKey = uniqueIndex(filter(asList(languages), notNull()), LanguageToKey.INSTANCE);
}
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 a0826dea9a7..1cc12aa21dd 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
@@ -28,6 +28,7 @@ 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.
@@ -43,6 +44,7 @@ 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;
@@ -55,6 +57,7 @@ public class PostMeasuresComputationChecksStep implements ComputationStep {
/**
* 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]);
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/metric/MetricRepositoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/metric/MetricRepositoryImpl.java
index dd122c1f692..c94934e0a3e 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/metric/MetricRepositoryImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/metric/MetricRepositoryImpl.java
@@ -24,7 +24,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.CheckForNull;
-import org.picocontainer.Startable;
+import org.sonar.api.Startable;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.metric.MetricDto;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/AbstractComputationSteps.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/AbstractComputationSteps.java
index ad981b68bba..708b35f6b7f 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/AbstractComputationSteps.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/AbstractComputationSteps.java
@@ -37,14 +37,6 @@ public abstract class AbstractComputationSteps implements ComputationSteps {
@Override
public Iterable<ComputationStep> instances() {
- return Iterables.transform(
- orderedStepClasses(),
- input -> {
- ComputationStep computationStepType = container.getComponentByType(input);
- if (computationStepType == null) {
- throw new IllegalStateException(String.format("Component not found: %s", input));
- }
- return computationStepType;
- });
+ return Iterables.transform(orderedStepClasses(), container::getComponentByType);
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/CoverageMeasuresStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/CoverageMeasuresStep.java
index 7d9ae017ac0..2db3a2d6e13 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/CoverageMeasuresStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/CoverageMeasuresStep.java
@@ -20,6 +20,8 @@
package org.sonar.ce.task.projectanalysis.step;
import java.util.List;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
import org.sonar.ce.task.projectanalysis.batch.BatchReportReader;
import org.sonar.ce.task.projectanalysis.component.Component;
import org.sonar.ce.task.projectanalysis.component.CrawlerDepthLimit;
@@ -77,7 +79,8 @@ public class CoverageMeasuresStep implements ComputationStep {
/**
* Constructor used when processing a Report (ie. a {@link BatchReportReader} instance is available in the container)
*/
- public CoverageMeasuresStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository, BatchReportReader reportReader) {
+ @Inject
+ public CoverageMeasuresStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository, @Nullable BatchReportReader reportReader) {
this.treeRootHolder = treeRootHolder;
this.metricRepository = metricRepository;
this.measureRepository = measureRepository;
@@ -88,20 +91,6 @@ public class CoverageMeasuresStep implements ComputationStep {
this.uncoveredConditionsMetric = metricRepository.getByKey(UNCOVERED_CONDITIONS_KEY);
}
- /**
- * Constructor used when processing Views (ie. no {@link BatchReportReader} instance is available in the container)
- */
- public CoverageMeasuresStep(TreeRootHolder treeRootHolder, MetricRepository metricRepository, MeasureRepository measureRepository) {
- this.treeRootHolder = treeRootHolder;
- this.metricRepository = metricRepository;
- this.measureRepository = measureRepository;
- this.linesToCoverMetric = metricRepository.getByKey(LINES_TO_COVER_KEY);
- this.uncoveredLinesMetric = metricRepository.getByKey(UNCOVERED_LINES_KEY);
- this.conditionsToCoverMetric = metricRepository.getByKey(CONDITIONS_TO_COVER_KEY);
- this.uncoveredConditionsMetric = metricRepository.getByKey(UNCOVERED_CONDITIONS_KEY);
- this.reportReader = null;
- }
-
@Override
public void execute(ComputationStep.Context context) {
if (reportReader != null) {
@@ -109,7 +98,7 @@ public class CoverageMeasuresStep implements ComputationStep {
}
new PathAwareCrawler<>(
FormulaExecutorComponentVisitor.newBuilder(metricRepository, measureRepository).buildFor(COVERAGE_FORMULAS))
- .visit(treeRootHolder.getReportTreeRoot());
+ .visit(treeRootHolder.getReportTreeRoot());
}
private class FileCoverageVisitor extends TypeAwareVisitorAdapter {
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadMeasureComputersStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadMeasureComputersStep.java
index 9f6e3b045ac..ee8d604da2d 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadMeasureComputersStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadMeasureComputersStep.java
@@ -40,6 +40,7 @@ import org.sonar.ce.task.projectanalysis.api.measurecomputer.MeasureComputerDefi
import org.sonar.ce.task.projectanalysis.api.measurecomputer.MeasureComputerWrapper;
import org.sonar.ce.task.projectanalysis.measure.MutableMeasureComputersHolder;
import org.sonar.ce.task.step.ComputationStep;
+import org.springframework.beans.factory.annotation.Autowired;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.FluentIterable.from;
@@ -53,6 +54,7 @@ public class LoadMeasureComputersStep implements ComputationStep {
private final MutableMeasureComputersHolder measureComputersHolder;
private final MeasureComputer[] measureComputers;
+ @Autowired(required = false)
public LoadMeasureComputersStep(MutableMeasureComputersHolder measureComputersHolder, Metrics[] metricsRepositories, MeasureComputer[] measureComputers) {
this.measureComputersHolder = measureComputersHolder;
this.measureComputers = measureComputers;
@@ -63,22 +65,25 @@ public class LoadMeasureComputersStep implements ComputationStep {
}
/**
- * Constructor override used by Pico to instantiate the class when no plugin is defining metrics
+ * Constructor override used by the ioc container to instantiate the class when no plugin is defining metrics
*/
+ @Autowired(required = false)
public LoadMeasureComputersStep(MutableMeasureComputersHolder measureComputersHolder, MeasureComputer[] measureComputers) {
this(measureComputersHolder, new Metrics[] {}, measureComputers);
}
/**
- * Constructor override used by Pico to instantiate the class when no plugin is defining measure computers
+ * Constructor override used by the ioc container to instantiate the class when no plugin is defining measure computers
*/
+ @Autowired(required = false)
public LoadMeasureComputersStep(MutableMeasureComputersHolder measureComputersHolder, Metrics[] metricsRepositories) {
this(measureComputersHolder, metricsRepositories, new MeasureComputer[] {});
}
/**
- * Constructor override used by Pico to instantiate the class when no plugin is defining metrics neither measure computers
+ * Constructor override used by the ioc container to instantiate the class when no plugin is defining metrics neither measure computers
*/
+ @Autowired(required = false)
public LoadMeasureComputersStep(MutableMeasureComputersHolder measureComputersHolder) {
this(measureComputersHolder, new Metrics[] {}, new MeasureComputer[] {});
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/TriggerViewRefreshStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/TriggerViewRefreshStep.java
index b6333ee3bb4..60cb4bc9d10 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/TriggerViewRefreshStep.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/TriggerViewRefreshStep.java
@@ -23,6 +23,7 @@ import java.util.OptionalInt;
import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder;
import org.sonar.ce.task.projectanalysis.view.TriggerViewRefreshDelegate;
import org.sonar.ce.task.step.ComputationStep;
+import org.springframework.beans.factory.annotation.Autowired;
/**
* This step will trigger refresh of Portfolios and Applications that include the current project.
@@ -34,16 +35,18 @@ public class TriggerViewRefreshStep implements ComputationStep {
private final AnalysisMetadataHolder analysisMetadata;
/**
- * Constructor used by Pico when no implementation of {@link TriggerViewRefreshDelegate} is available
+ * Constructor used by the ioc container when no implementation of {@link TriggerViewRefreshDelegate} is available
*/
+ @Autowired(required = false)
public TriggerViewRefreshStep(AnalysisMetadataHolder analysisMetadata) {
this.analysisMetadata = analysisMetadata;
this.triggerViewRefreshDelegates = new TriggerViewRefreshDelegate[0];
}
/**
- * Constructor used by Pico when an implementation of {@link TriggerViewRefreshDelegate} is available
+ * Constructor used by the ioc container when an implementation of {@link TriggerViewRefreshDelegate} is available
*/
+ @Autowired(required = false)
public TriggerViewRefreshStep(AnalysisMetadataHolder analysisMetadata, TriggerViewRefreshDelegate[] triggerViewRefreshDelegates) {
this.analysisMetadata = analysisMetadata;
this.triggerViewRefreshDelegates = triggerViewRefreshDelegates;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessor.java
index be26b4774f4..7f9163911ca 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessor.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessor.java
@@ -31,18 +31,18 @@ import org.sonar.ce.task.projectanalysis.step.AbstractComputationSteps;
import org.sonar.ce.task.step.ComputationStep;
import org.sonar.ce.task.step.ComputationStepExecutor;
import org.sonar.ce.task.taskprocessor.CeTaskProcessor;
-import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.Container;
import org.sonar.core.platform.ContainerPopulator;
+import org.sonar.core.platform.SpringComponentContainer;
import static org.sonar.db.ce.CeTaskTypes.AUDIT_PURGE;
public class AuditPurgeTaskProcessor implements CeTaskProcessor {
private static final Set<String> HANDLED_TYPES = Set.of(AUDIT_PURGE);
- private final ComponentContainer ceEngineContainer;
+ private final SpringComponentContainer ceEngineContainer;
- public AuditPurgeTaskProcessor(ComponentContainer ceEngineContainer) {
+ public AuditPurgeTaskProcessor(SpringComponentContainer ceEngineContainer) {
this.ceEngineContainer = ceEngineContainer;
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessor.java
index 29879730aa9..edef1621342 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessor.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessor.java
@@ -32,18 +32,18 @@ import org.sonar.ce.task.projectanalysis.step.AbstractComputationSteps;
import org.sonar.ce.task.step.ComputationStep;
import org.sonar.ce.task.step.ComputationStepExecutor;
import org.sonar.ce.task.taskprocessor.CeTaskProcessor;
-import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.Container;
import org.sonar.core.platform.ContainerPopulator;
+import org.sonar.core.platform.SpringComponentContainer;
import static org.sonar.db.ce.CeTaskTypes.BRANCH_ISSUE_SYNC;
public class IssueSyncTaskProcessor implements CeTaskProcessor {
private static final Set<String> HANDLED_TYPES = ImmutableSet.of(BRANCH_ISSUE_SYNC);
- private final ComponentContainer ceEngineContainer;
+ private final SpringComponentContainer ceEngineContainer;
- public IssueSyncTaskProcessor(ComponentContainer ceEngineContainer) {
+ public IssueSyncTaskProcessor(SpringComponentContainer ceEngineContainer) {
this.ceEngineContainer = ceEngineContainer;
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/ReportTaskProcessor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/ReportTaskProcessor.java
index 16fac974efd..b0939163ce5 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/ReportTaskProcessor.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/taskprocessor/ReportTaskProcessor.java
@@ -22,6 +22,7 @@ package org.sonar.ce.task.projectanalysis.taskprocessor;
import java.util.Collections;
import java.util.Set;
import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.ce.task.CeTask;
import org.sonar.ce.task.CeTaskResult;
import org.sonar.ce.task.container.TaskContainer;
@@ -29,43 +30,36 @@ import org.sonar.ce.task.projectanalysis.container.ContainerFactory;
import org.sonar.ce.task.step.ComputationStepExecutor;
import org.sonar.ce.task.taskprocessor.CeTaskProcessor;
import org.sonar.ce.task.taskprocessor.TaskResultHolder;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
import org.sonar.db.ce.CeTaskTypes;
import org.sonar.ce.task.projectanalysis.container.ReportAnalysisComponentProvider;
+import org.springframework.beans.factory.annotation.Autowired;
public class ReportTaskProcessor implements CeTaskProcessor {
private static final Set<String> HANDLED_TYPES = Collections.singleton(CeTaskTypes.REPORT);
private final ContainerFactory containerFactory;
- private final ComponentContainer serverContainer;
+ private final SpringComponentContainer serverContainer;
@CheckForNull
private final ReportAnalysisComponentProvider[] componentProviders;
- /**
- * Used when at least one Privileged plugin is installed
- */
- public ReportTaskProcessor(ContainerFactory containerFactory, ComponentContainer serverContainer, ReportAnalysisComponentProvider[] componentProviders) {
+ @Autowired(required = false)
+ public ReportTaskProcessor(ContainerFactory containerFactory, SpringComponentContainer serverContainer, @Nullable ReportAnalysisComponentProvider[] componentProviders) {
this.containerFactory = containerFactory;
this.serverContainer = serverContainer;
this.componentProviders = componentProviders;
}
/**
- * Used when no privileged plugin is installed
- */
- public ReportTaskProcessor(ContainerFactory containerFactory, ComponentContainer serverContainer) {
- this.containerFactory = containerFactory;
- this.serverContainer = serverContainer;
- this.componentProviders = null;
- }
-
- /**
* Used when loaded in WebServer where none of the dependencies are available and where only
* {@link #getHandledCeTaskTypes()} will be called.
*/
+ @Autowired(required = false)
public ReportTaskProcessor() {
- this(null, null, null);
+ this.containerFactory = null;
+ this.serverContainer = null;
+ this.componentProviders = null;
}
@Override
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulator.java
index 26e9084cc4e..30f57010550 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulator.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulator.java
@@ -54,8 +54,8 @@ public class ProjectExportContainerPopulator implements ContainerPopulator<TaskC
container.add(projectDescriptor);
container.add(steps);
- container.addSingletons(COMPONENT_CLASSES);
- container.addSingletons(steps.orderedStepClasses());
+ container.add(COMPONENT_CLASSES);
+ container.add(steps.orderedStepClasses());
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/taskprocessor/ProjectExportTaskProcessor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/taskprocessor/ProjectExportTaskProcessor.java
index 68c03bebf1e..24cbdd9bf4c 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/taskprocessor/ProjectExportTaskProcessor.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/taskprocessor/ProjectExportTaskProcessor.java
@@ -27,15 +27,15 @@ import org.sonar.ce.task.container.TaskContainerImpl;
import org.sonar.ce.task.projectexport.ProjectExportContainerPopulator;
import org.sonar.ce.task.projectexport.ProjectExportProcessor;
import org.sonar.ce.task.taskprocessor.CeTaskProcessor;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
import static org.sonar.db.ce.CeTaskTypes.PROJECT_EXPORT;
public class ProjectExportTaskProcessor implements CeTaskProcessor {
- private final ComponentContainer componentContainer;
+ private final SpringComponentContainer componentContainer;
- public ProjectExportTaskProcessor(ComponentContainer componentContainer) {
+ public ProjectExportTaskProcessor(SpringComponentContainer componentContainer) {
this.componentContainer = componentContainer;
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectExportDumpFSImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectExportDumpFSImpl.java
index 6be47c09411..bd44654516b 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectExportDumpFSImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectExportDumpFSImpl.java
@@ -20,7 +20,7 @@
package org.sonar.ce.task.projectexport.util;
import java.io.File;
-import org.picocontainer.Startable;
+import org.sonar.api.Startable;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Configuration;
import org.sonar.api.server.ServerSide;
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectImportDumpFSImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectImportDumpFSImpl.java
index 434312438c7..fc23a0602b4 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectImportDumpFSImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectexport/util/ProjectImportDumpFSImpl.java
@@ -20,7 +20,7 @@
package org.sonar.ce.task.projectexport.util;
import java.io.File;
-import org.picocontainer.Startable;
+import org.sonar.api.Startable;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.config.Configuration;
import org.sonar.api.server.ServerSide;
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java
index f134ff9a828..b3c6aff2ef5 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutorTest.java
@@ -116,7 +116,7 @@ public class PostProjectAnalysisTasksExecutorTest {
@Test
@UseDataProvider("booleanValues")
public void does_not_fail_when_there_is_no_PostProjectAnalysisTasksExecutor(boolean allStepsExecuted) {
- new PostProjectAnalysisTasksExecutor(ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader)
+ new PostProjectAnalysisTasksExecutor(ceTask, analysisMetadataHolder, qualityGateHolder, qualityGateStatusHolder, reportReader, null)
.finished(allStepsExecuted);
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulatorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulatorTest.java
index 0777349a152..911f1415d19 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulatorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/container/ProjectAnalysisTaskContainerPopulatorTest.java
@@ -21,21 +21,15 @@ package org.sonar.ce.task.projectanalysis.container;
import com.google.common.collect.ImmutableList;
import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Test;
-import org.picocontainer.DefaultPicoContainer;
-import org.picocontainer.PicoContainer;
import org.reflections.Reflections;
import org.sonar.ce.task.CeTask;
-import org.sonar.ce.task.container.TaskContainer;
import org.sonar.ce.task.projectanalysis.step.PersistComponentsStep;
+import org.sonar.ce.task.projectanalysis.task.ListTaskContainer;
import org.sonar.ce.task.step.ComputationStep;
-import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.util.stream.MoreCollectors;
import static com.google.common.collect.Sets.difference;
@@ -46,25 +40,23 @@ import static org.mockito.Mockito.when;
public class ProjectAnalysisTaskContainerPopulatorTest {
private static final String PROJECTANALYSIS_STEP_PACKAGE = "org.sonar.ce.task.projectanalysis.step";
- private CeTask task = mock(CeTask.class);
- private ProjectAnalysisTaskContainerPopulator underTest;
+ private final CeTask task = mock(CeTask.class);
+ private final ProjectAnalysisTaskContainerPopulator underTest = new ProjectAnalysisTaskContainerPopulator(task, null);
@Test
public void item_is_added_to_the_container() {
- underTest = new ProjectAnalysisTaskContainerPopulator(task, null);
- AddedObjectsRecorderTaskContainer container = new AddedObjectsRecorderTaskContainer();
+ ListTaskContainer container = new ListTaskContainer();
underTest.populateContainer(container);
- assertThat(container.added).contains(task);
+ assertThat(container.getAddedComponents()).contains(task);
}
@Test
public void all_computation_steps_are_added_in_order_to_the_container() {
- underTest = new ProjectAnalysisTaskContainerPopulator(task, null);
- AddedObjectsRecorderTaskContainer container = new AddedObjectsRecorderTaskContainer();
+ ListTaskContainer container = new ListTaskContainer();
underTest.populateContainer(container);
- Set<String> computationStepClassNames = container.added.stream()
+ Set<String> computationStepClassNames = container.getAddedComponents().stream()
.map(s -> {
if (s instanceof Class) {
return (Class<?>) s;
@@ -94,11 +86,10 @@ public class ProjectAnalysisTaskContainerPopulatorTest {
@Test
public void at_least_one_core_step_is_added_to_the_container() {
- underTest = new ProjectAnalysisTaskContainerPopulator(task, null);
- AddedObjectsRecorderTaskContainer container = new AddedObjectsRecorderTaskContainer();
+ ListTaskContainer container = new ListTaskContainer();
underTest.populateContainer(container);
- assertThat(container.added).contains(PersistComponentsStep.class);
+ assertThat(container.getAddedComponents()).contains(PersistComponentsStep.class);
}
@Test
@@ -108,74 +99,16 @@ public class ProjectAnalysisTaskContainerPopulatorTest {
ReportAnalysisComponentProvider componentProvider = mock(ReportAnalysisComponentProvider.class);
when(componentProvider.getComponents()).thenReturn(ImmutableList.of(object, clazz));
- underTest = new ProjectAnalysisTaskContainerPopulator(task, new ReportAnalysisComponentProvider[] {componentProvider});
- AddedObjectsRecorderTaskContainer container = new AddedObjectsRecorderTaskContainer();
+ ProjectAnalysisTaskContainerPopulator populator = new ProjectAnalysisTaskContainerPopulator(task, new ReportAnalysisComponentProvider[] {componentProvider});
+ ListTaskContainer container = new ListTaskContainer();
container.add(componentProvider);
- underTest.populateContainer(container);
+ populator.populateContainer(container);
- assertThat(container.added).contains(object, clazz);
+ assertThat(container.getAddedComponents()).contains(object, clazz);
}
private static final class MyClass {
}
- private static class AddedObjectsRecorderTaskContainer implements TaskContainer {
- private static final DefaultPicoContainer SOME_EMPTY_PICO_CONTAINER = new DefaultPicoContainer();
-
- private List<Object> added = new ArrayList<>();
-
- @Override
- public void bootup() {
- // no effect
- }
-
- @Override
- public ComponentContainer getParent() {
- throw new UnsupportedOperationException("getParent is not implemented");
- }
-
- @Override
- public void close() {
- throw new UnsupportedOperationException("cleanup is not implemented");
- }
-
- @Override
- public PicoContainer getPicoContainer() {
- return SOME_EMPTY_PICO_CONTAINER;
- }
-
- @Override
- public ComponentContainer add(Object... objects) {
- added.addAll(Arrays.asList(objects));
- return null; // not used anyway
- }
-
- @Override
- public ComponentContainer addSingletons(Iterable<?> components) {
- for (Object component : components) {
- added.add(component);
- }
- return null; // not used anyway
- }
-
- @Override
- public <T> T getComponentByType(Class<T> type) {
- for (Object add : added) {
- if (add.getClass().getSimpleName().contains(type.getSimpleName())) {
- return (T) add;
- }
- }
- return null;
- }
-
- @Override
- public <T> List<T> getComponentsByType(final Class<T> type) {
- return added.stream()
- .filter(input -> input.getClass().getSimpleName().contains(type.getSimpleName()))
- .map(input -> (T) input)
- .collect(Collectors.toList());
- }
- }
-
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProviderTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProviderTest.java
new file mode 100644
index 00000000000..896f45618a8
--- /dev/null
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/filesystem/ComputationTempFolderProviderTest.java
@@ -0,0 +1,67 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2022 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.ce.task.projectanalysis.filesystem;
+
+import org.apache.commons.io.FileUtils;
+import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import org.sonar.api.utils.TempFolder;
+import org.sonar.server.platform.ServerFileSystem;
+
+import java.io.File;
+
+public class ComputationTempFolderProviderTest {
+
+ @Rule
+ public TemporaryFolder temp = new TemporaryFolder();
+
+ private final ComputationTempFolderProvider underTest = new ComputationTempFolderProvider();
+
+ @Test
+ public void existing_temp_dir() throws Exception {
+ ServerFileSystem fs = mock(ServerFileSystem.class);
+ File tmpDir = temp.newFolder();
+ when(fs.getTempDir()).thenReturn(tmpDir);
+
+ TempFolder folder = underTest.provide(fs);
+ assertThat(folder).isNotNull();
+ File newDir = folder.newDir();
+ assertThat(newDir).exists().isDirectory();
+ assertThat(newDir.getParentFile().getCanonicalPath()).startsWith(tmpDir.getCanonicalPath());
+ }
+
+ @Test
+ public void create_temp_dir_if_missing() throws Exception {
+ ServerFileSystem fs = mock(ServerFileSystem.class);
+ File tmpDir = temp.newFolder();
+ when(fs.getTempDir()).thenReturn(tmpDir);
+ FileUtils.forceDelete(tmpDir);
+
+ TempFolder folder = underTest.provide(fs);
+ assertThat(folder).isNotNull();
+ File newDir = folder.newDir();
+ assertThat(newDir).exists().isDirectory();
+ assertThat(newDir.getParentFile().getCanonicalPath()).startsWith(tmpDir.getCanonicalPath());
+ }
+}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportComputationStepsTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportComputationStepsTest.java
index bb0a6f6b177..247885957a5 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportComputationStepsTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ReportComputationStepsTest.java
@@ -19,11 +19,12 @@
*/
package org.sonar.ce.task.projectanalysis.step;
-import com.google.common.collect.Lists;
import org.junit.Test;
import org.sonar.ce.task.container.TaskContainerImpl;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.ce.task.step.ComputationStep;
+import org.sonar.core.platform.SpringComponentContainer;
+import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
@@ -31,33 +32,30 @@ public class ReportComputationStepsTest {
@Test
public void instances_throws_ISE_if_container_does_not_have_any_step() {
- assertThatThrownBy(() -> {
- TaskContainerImpl computeEngineContainer = new TaskContainerImpl(new ComponentContainer(), container -> {
- // do nothing
- });
-
- Lists.newArrayList(new ReportComputationSteps(computeEngineContainer).instances());
- })
+ TaskContainerImpl computeEngineContainer = new TaskContainerImpl(new SpringComponentContainer(), container -> {
+ // do nothing
+ });
+ Iterable<ComputationStep> instances = new ReportComputationSteps(computeEngineContainer).instances();
+ assertThatThrownBy(() -> newArrayList(instances))
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Component not found: " + ExtractReportStep.class);
+ .hasMessageContaining(ExtractReportStep.class.getName());
}
@Test
public void instances_throws_ISE_if_container_does_not_have_second_step() {
- assertThatThrownBy(() -> {
- final ExtractReportStep reportExtractionStep = mock(ExtractReportStep.class);
- ComponentContainer componentContainer = new ComponentContainer() {
- {
- addSingleton(reportExtractionStep);
- }
- };
- TaskContainerImpl computeEngineContainer = new TaskContainerImpl(componentContainer, container -> {
- // do nothing
- });
-
- Lists.newArrayList(new ReportComputationSteps(computeEngineContainer).instances());
- })
+ ExtractReportStep reportExtractionStep = mock(ExtractReportStep.class);
+ SpringComponentContainer componentContainer = new SpringComponentContainer() {
+ {
+ add(reportExtractionStep);
+ }
+ }.startComponents();
+ TaskContainerImpl computeEngineContainer = new TaskContainerImpl(componentContainer, container -> {
+ // do nothing
+ });
+ computeEngineContainer.startComponents();
+ Iterable<ComputationStep> instances = new ReportComputationSteps(computeEngineContainer).instances();
+ assertThatThrownBy(() -> newArrayList(instances))
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Component not found: class org.sonar.ce.task.projectanalysis.step.PersistScannerContextStep");
+ .hasMessageContaining("org.sonar.ce.task.projectanalysis.step.PersistScannerContextStep");
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsCoverageMeasuresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsCoverageMeasuresStepTest.java
index e01374588d5..2f5300b77d1 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsCoverageMeasuresStepTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsCoverageMeasuresStepTest.java
@@ -62,7 +62,7 @@ public class ViewsCoverageMeasuresStepTest {
@Rule
public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository);
- CoverageMeasuresStep underTest = new CoverageMeasuresStep(treeRootHolder, metricRepository, measureRepository);
+ CoverageMeasuresStep underTest = new CoverageMeasuresStep(treeRootHolder, metricRepository, measureRepository, null);
@Before
public void setUp() {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskModuleTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskModuleTest.java
index 9be01d4a363..4c52736de16 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskModuleTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskModuleTest.java
@@ -20,18 +20,15 @@
package org.sonar.ce.task.projectanalysis.taskprocessor;
import org.junit.Test;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.ListContainer;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.sonar.core.platform.ComponentContainer.COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER;
public class AuditPurgeTaskModuleTest {
-
@Test
public void verifyCountOfAddedComponents() {
- ComponentContainer container = new ComponentContainer();
+ ListContainer container = new ListContainer();
new AuditPurgeTaskModule().configure(container);
- assertThat(container.size()).isEqualTo(COMPONENTS_IN_EMPTY_COMPONENT_CONTAINER + 1);
+ assertThat(container.getAddedObjects()).hasSize(1);
}
-
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessorTest.java
index 53e0165c2f6..3ed573ec317 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/AuditPurgeTaskProcessorTest.java
@@ -26,18 +26,18 @@ import org.mockito.Mockito;
import org.sonar.ce.task.CeTask;
import org.sonar.ce.task.container.TaskContainer;
import org.sonar.ce.task.step.ComputationStep;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
import static org.sonar.ce.task.projectanalysis.taskprocessor.AuditPurgeTaskProcessor.AuditPurgeComputationSteps;
import static org.sonar.db.ce.CeTaskTypes.AUDIT_PURGE;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
public class AuditPurgeTaskProcessorTest {
- private ComponentContainer ceEngineContainer = Mockito.mock(ComponentContainer.class);
-
- private AuditPurgeTaskProcessor underTest = new AuditPurgeTaskProcessor(ceEngineContainer);
- private TaskContainer container = Mockito.spy(TaskContainer.class);
+ private final SpringComponentContainer ceEngineContainer = mock(SpringComponentContainer.class);
+ private final AuditPurgeTaskProcessor underTest = new AuditPurgeTaskProcessor(ceEngineContainer);
+ private final TaskContainer container = Mockito.spy(TaskContainer.class);
@Test
public void getHandledCeTaskTypes() {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessorTest.java
index df577f2df5e..9f2929f8eb3 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/taskprocessor/IssueSyncTaskProcessorTest.java
@@ -26,18 +26,18 @@ import org.mockito.Mockito;
import org.sonar.ce.task.CeTask;
import org.sonar.ce.task.container.TaskContainer;
import org.sonar.ce.task.step.ComputationStep;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.core.platform.SpringComponentContainer;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
import static org.sonar.ce.task.projectanalysis.taskprocessor.IssueSyncTaskProcessor.SyncComputationSteps;
import static org.sonar.db.ce.CeTaskTypes.BRANCH_ISSUE_SYNC;
public class IssueSyncTaskProcessorTest {
- private ComponentContainer ceEngineContainer = Mockito.mock(ComponentContainer.class);
-
- private IssueSyncTaskProcessor underTest = new IssueSyncTaskProcessor(ceEngineContainer);
- private TaskContainer container = Mockito.spy(TaskContainer.class);
+ private final SpringComponentContainer ceEngineContainer = mock(SpringComponentContainer.class);
+ private final IssueSyncTaskProcessor underTest = new IssueSyncTaskProcessor(ceEngineContainer);
+ private final TaskContainer container = Mockito.spy(TaskContainer.class);
@Test
public void getHandledCeTaskTypes() {
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportComputationStepsTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportComputationStepsTest.java
index 3dcc9c5a2d3..9e63aaaa01a 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportComputationStepsTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportComputationStepsTest.java
@@ -24,18 +24,19 @@ import org.junit.Test;
import org.sonar.ce.task.container.TaskContainer;
import org.sonar.ce.task.container.TaskContainerImpl;
import org.sonar.ce.task.projectanalysis.step.ComplexityMeasuresStep;
-import org.sonar.ce.task.projectexport.steps.LoadProjectStep;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.ce.task.step.ComputationStep;
+import org.sonar.core.platform.SpringComponentContainer;
import static com.google.common.collect.ImmutableList.copyOf;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class ProjectExportComputationStepsTest {
-
- private TaskContainer container = mock(TaskContainer.class);
- private ProjectExportComputationSteps underTest = new ProjectExportComputationSteps(container);
+ private final TaskContainer container = mock(TaskContainer.class);
+ private final ProjectExportComputationSteps underTest = new ProjectExportComputationSteps(container);
@Test
public void count_step_classes() {
@@ -44,29 +45,30 @@ public class ProjectExportComputationStepsTest {
@Test
public void instances_throws_ISE_if_steps_do_not_exist_in_container() {
- assertThatThrownBy(() -> copyOf(underTest.instances()))
+ when(container.getComponentByType(any())).thenThrow(new IllegalStateException("Error"));
+ Iterable<ComputationStep> instances = underTest.instances();
+ assertThatThrownBy(() -> copyOf(instances))
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Component not found: " + LoadProjectStep.class);
+ .hasMessage("Error");
}
@Test
public void instances_throws_ISE_if_container_does_not_have_second_step() {
- assertThatThrownBy(() -> {
- final ComplexityMeasuresStep reportExtractionStep = mock(ComplexityMeasuresStep.class);
-
- ComponentContainer componentContainer = new ComponentContainer() {
- {
- addSingleton(reportExtractionStep);
- }
- };
- TaskContainerImpl computeEngineContainer = new TaskContainerImpl(componentContainer, container -> {
- // do nothing
- });
+ ComplexityMeasuresStep reportExtractionStep = mock(ComplexityMeasuresStep.class);
- Lists.newArrayList(new ProjectExportComputationSteps(computeEngineContainer).instances());
- })
+ SpringComponentContainer componentContainer = new SpringComponentContainer() {
+ {
+ add(reportExtractionStep);
+ }
+ }.startComponents();
+ TaskContainerImpl computeEngineContainer = new TaskContainerImpl(componentContainer, container -> {
+ // do nothing
+ });
+ computeEngineContainer.startComponents();
+ Iterable<ComputationStep> instances = new ProjectExportComputationSteps(computeEngineContainer).instances();
+ assertThatThrownBy(() -> Lists.newArrayList(instances))
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Component not found: class org.sonar.ce.task.projectexport.steps.LoadProjectStep");
+ .hasMessageContaining("class org.sonar.ce.task.projectexport.steps.LoadProjectStep");
}
}
diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulatorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulatorTest.java
index 999f78f1220..d6760965d93 100644
--- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulatorTest.java
+++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectexport/ProjectExportContainerPopulatorTest.java
@@ -19,87 +19,23 @@
*/
package org.sonar.ce.task.projectexport;
-import com.google.common.base.Predicate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.StreamSupport;
import org.junit.Test;
-import org.picocontainer.PicoContainer;
-import org.sonar.ce.task.container.TaskContainer;
+import org.sonar.ce.task.projectanalysis.task.ListTaskContainer;
import org.sonar.ce.task.projectexport.taskprocessor.ProjectDescriptor;
import org.sonar.ce.task.setting.SettingsLoader;
-import org.sonar.ce.task.step.ComputationStep;
-import org.sonar.core.platform.ComponentContainer;
import static org.assertj.core.api.Assertions.assertThat;
public class ProjectExportContainerPopulatorTest {
-
- private static final int COMPONENTS_BY_DEFAULT_IN_CONTAINER = 2;
-
private final ProjectDescriptor descriptor = new ProjectDescriptor("project_uuid", "project_key", "Project Name");
private final ProjectExportContainerPopulator underTest = new ProjectExportContainerPopulator(descriptor);
@Test
public void test_populateContainer() {
- RecorderTaskContainer container = new RecorderTaskContainer();
+ ListTaskContainer container = new ListTaskContainer();
underTest.populateContainer(container);
- assertThat(container.addedComponents)
- .hasSize(COMPONENTS_BY_DEFAULT_IN_CONTAINER + 8)
+ assertThat(container.getAddedComponents())
+ .hasSize(29)
.contains(descriptor, SettingsLoader.class);
}
-
- private static class RecorderTaskContainer implements TaskContainer {
- private final List<Object> addedComponents = new ArrayList<>();
-
- @Override
- public ComponentContainer add(Object... objects) {
- addedComponents.addAll(Arrays.asList(objects));
- // not used anyway
- return null;
- }
-
- @Override
- public ComponentContainer addSingletons(Iterable<?> components) {
- List<Object> filteredComponents = StreamSupport.stream(components.spliterator(), false)
- .filter((Predicate<Object>) input -> !(input instanceof Class) || !ComputationStep.class.isAssignableFrom((Class<?>) input))
- .collect(Collectors.toList());
-
- addedComponents.addAll(filteredComponents);
- // not used anyway
- return null;
- }
-
- @Override
- public ComponentContainer getParent() {
- throw new UnsupportedOperationException("getParent is not implemented");
- }
-
- @Override
- public void bootup() {
- throw new UnsupportedOperationException("bootup is not implemented");
- }
-
- @Override
- public void close() {
- throw new UnsupportedOperationException("close is not implemented");
- }
-
- @Override
- public PicoContainer getPicoContainer() {
- throw new UnsupportedOperationException("getParent is not implemented");
- }
-
- @Override
- public <T> T getComponentByType(Class<T> type) {
- throw new UnsupportedOperationException("getParent is not implemented");
- }
-
- @Override
- public <T> List<T> getComponentsByType(final Class<T> type) {
- throw new UnsupportedOperationException("getParent is not implemented");
- }
- }
}
diff --git a/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/task/ListTaskContainer.java b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/task/ListTaskContainer.java
new file mode 100644
index 00000000000..c22b9aee83f
--- /dev/null
+++ b/server/sonar-ce-task-projectanalysis/src/testFixtures/java/org/sonar/ce/task/projectanalysis/task/ListTaskContainer.java
@@ -0,0 +1,80 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2022 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.ce.task.projectanalysis.task;
+
+import com.google.common.collect.Iterables;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import org.sonar.ce.task.container.TaskContainer;
+import org.sonar.core.platform.Module;
+import org.sonar.core.platform.SpringComponentContainer;
+
+public class ListTaskContainer implements TaskContainer {
+ private final List<Object> addedComponents = new ArrayList<>();
+
+ @Override
+ public SpringComponentContainer add(Object... objects) {
+ for (Object o : objects) {
+ if (o instanceof Module) {
+ ((Module) o).configure(this);
+ } else if (o instanceof Iterable) {
+ add(Iterables.toArray((Iterable<?>) o, Object.class));
+ } else {
+ this.addedComponents.add(o);
+ }
+ }
+ // not used anyway
+ return null;
+ }
+
+ public List<Object> getAddedComponents() {
+ return addedComponents;
+ }
+
+ @Override
+ public SpringComponentContainer getParent() {
+ throw new UnsupportedOperationException("getParent is not implemented");
+ }
+
+ @Override
+ public void bootup() {
+ throw new UnsupportedOperationException("bootup is not implemented");
+ }
+
+ @Override
+ public void close() {
+ throw new UnsupportedOperationException("close is not implemented");
+ }
+
+ @Override
+ public <T> T getComponentByType(Class<T> type) {
+ throw new UnsupportedOperationException("getParent is not implemented");
+ }
+
+ @Override public <T> Optional<T> getOptionalComponentByType(Class<T> type) {
+ throw new UnsupportedOperationException("getParent is not implemented");
+ }
+
+ @Override
+ public <T> List<T> getComponentsByType(final Class<T> type) {
+ throw new UnsupportedOperationException("getParent is not implemented");
+ }
+}