@Override
protected void configure() {
container.addSingleton(globalProperties);
+ if (reactor != null) {
+ container.addSingleton(reactor);
+ }
container.addSingleton(new PropertiesConfiguration());
container.addSingleton(BootstrapSettings.class);
container.addSingleton(ServerClient.class);
@Override
protected void doStart() {
- Container childModule = new TaskBootstrapContainer(taskCommand, reactor);
+ Container childModule = new TaskBootstrapContainer(taskCommand);
try {
installChild(childModule);
childModule.start();
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.config.EmailSettings;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.api.task.Task;
import org.sonar.api.task.TaskDefinition;
import org.sonar.api.utils.SonarException;
import org.sonar.batch.DefaultResourceCreationLock;
+import org.sonar.batch.ProjectConfigurator;
import org.sonar.batch.components.PastMeasuresLoader;
import org.sonar.batch.components.PastSnapshotFinder;
import org.sonar.batch.components.PastSnapshotFinderByDate;
import org.sonar.jpa.session.DefaultDatabaseConnector;
import org.sonar.jpa.session.JpaDatabaseSession;
-import javax.annotation.Nullable;
-
/**
* Level-3 components. Task-level components that don't depends on project.
*/
private TaskDefinition taskDefinition;
- private ProjectReactor reactor;
+ private boolean projectPresent;
- public ProjectLessTaskContainer(TaskDefinition task, @Nullable ProjectReactor reactor) {
+ public ProjectLessTaskContainer(TaskDefinition task, boolean projectPresent) {
this.taskDefinition = task;
- this.reactor = reactor;
+ this.projectPresent = projectPresent;
}
@Override
registerDatabaseComponents();
registerCoreProjectLessTasks();
registerProjectLessTaskExtensions();
+ if (projectPresent && ExtensionUtils.requiresProject(taskDefinition.getTask())) {
+ container.addSingleton(ProjectExclusions.class);
+ container.addSingleton(ProjectReactorReady.class);
+ container.addSingleton(DryRunDatabase.class);
+ }
}
private void registerCoreComponents() {
container.addSingleton(DefaultResourcePersister.class);
container.addSingleton(SourcePersister.class);
container.addSingleton(DefaultNotificationManager.class);
-
+ container.addSingleton(ProjectConfigurator.class);
}
private void registerDatabaseComponents() {
*/
@Override
protected void doStart() {
- boolean projectPresent = (reactor != null);
if (ExtensionUtils.requiresProject(taskDefinition.getTask())) {
if (!projectPresent) {
throw new SonarException("Task '" + taskDefinition.getName() + "' requires to be run on a project");
}
// Create a new child container to put project specific components
- Container childModule = new ProjectTaskContainer(taskDefinition, reactor);
+ Container childModule = new ProjectTaskContainer(taskDefinition);
try {
installChild(childModule);
childModule.start();
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.task.Task;
import org.sonar.api.task.TaskDefinition;
import org.sonar.api.utils.SonarException;
import org.sonar.batch.DefaultFileLinesContextFactory;
-import org.sonar.batch.ProjectConfigurator;
import org.sonar.batch.ProjectTree;
import org.sonar.batch.index.DefaultIndex;
import org.sonar.batch.scan.ScanTask;
private TaskDefinition taskDefinition;
- private ProjectReactor reactor;
-
- public ProjectTaskContainer(TaskDefinition task, ProjectReactor reactor) {
+ public ProjectTaskContainer(TaskDefinition task) {
this.taskDefinition = task;
- this.reactor = reactor;
}
@Override
protected void configure() {
- container.addSingleton(reactor);
registerCoreProjectTasks();
registerCoreComponentsRequiringProject();
registerProjectTaskExtensions();
}
private void registerCoreComponentsRequiringProject() {
- container.addSingleton(ProjectExclusions.class);
- container.addSingleton(ProjectReactorReady.class);
container.addSingleton(ProjectTree.class);
- container.addSingleton(ProjectConfigurator.class);
container.addSingleton(DefaultIndex.class);
container.addSingleton(DefaultFileLinesContextFactory.class);
container.addSingleton(ProjectLock.class);
- container.addSingleton(DryRunDatabase.class);
// graphs
container.addSingleton(ScanGraph.create());
public class TaskBootstrapContainer extends Container {
private String taskCommand;
- private ProjectReactor reactor;
- public TaskBootstrapContainer(@Nullable String taskCommand, @Nullable ProjectReactor reactor) {
+ public TaskBootstrapContainer(@Nullable String taskCommand) {
this.taskCommand = taskCommand;
- this.reactor = reactor;
}
@Override
}
private void executeTask(TaskDefinition taskDefinition) {
- boolean projectPresent = (reactor != null);
+ boolean projectPresent = (container.getComponentByType(ProjectReactor.class) != null);
if (ExtensionUtils.requiresProject(taskDefinition.getTask()) && !projectPresent) {
throw new SonarException("Task '" + taskDefinition.getName() + "' requires to be run on a project");
}
- Container childModule = new ProjectLessTaskContainer(taskDefinition, reactor);
+ Container childModule = new ProjectLessTaskContainer(taskDefinition, projectPresent);
try {
installChild(childModule);
childModule.start();
}
};
bootstrapModule.init();
- TaskBootstrapContainer module = new TaskBootstrapContainer("inspect", null);
+ TaskBootstrapContainer module = new TaskBootstrapContainer("inspect");
bootstrapModule.installChild(module);
thrown.expect(SonarException.class);
package org.sonar.batch.bootstrap;
import org.junit.Test;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.task.TaskDefinition;
}
};
bootstrapModule.init();
- ProjectTaskContainer module = new ProjectTaskContainer(TaskDefinition.create(), new ProjectReactor(ProjectDefinition.create()));
+ ProjectTaskContainer module = new ProjectTaskContainer(TaskDefinition.create());
bootstrapModule.installChild(module);
verify(extensionInstaller).installTaskExtensions(any(ComponentContainer.class), eq(true));
}
};
bootstrapModule.init();
- ProjectLessTaskContainer module = new ProjectLessTaskContainer(TaskDefinition.create(), null);
+ ProjectLessTaskContainer module = new ProjectLessTaskContainer(TaskDefinition.create(), false);
bootstrapModule.installChild(module);
verify(extensionInstaller).installTaskExtensions(any(ComponentContainer.class), eq(false));
*/
package org.sonar.api.batch.bootstrap;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.batch.InstantiationStrategy;
+import org.sonar.api.task.TaskExtension;
/**
* This extension point allows to change project structure at runtime. It is executed once during task startup.
*
* @since 2.9
*/
-@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class ProjectBuilder implements BatchExtension {
+public abstract class ProjectBuilder implements TaskExtension {
private ProjectReactor reactor;