/* * Copyright 2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gradle.api.tasks.diagnostics; import org.gradle.api.Project; import org.gradle.api.Rule; import org.gradle.api.internal.project.ProjectTaskLister; import org.gradle.api.internal.tasks.options.Option; import org.gradle.api.tasks.Console; import org.gradle.api.tasks.diagnostics.internal.AggregateMultiProjectTaskReportModel; import org.gradle.api.tasks.diagnostics.internal.DefaultGroupTaskReportModel; import org.gradle.api.tasks.diagnostics.internal.ReportRenderer; import org.gradle.api.tasks.diagnostics.internal.SingleProjectTaskReportModel; import org.gradle.api.tasks.diagnostics.internal.TaskDetails; import org.gradle.api.tasks.diagnostics.internal.TaskDetailsFactory; import org.gradle.api.tasks.diagnostics.internal.TaskReportRenderer; import javax.inject.Inject; import java.io.IOException; /** * <p>Displays a list of tasks in the project. An instance of this type is used when you execute the {@code tasks} task * from the command-line.</p> * * By default, this report shows only those tasks which have been assigned to a task group, so-called <i>visible</i> * tasks. Tasks which have not been assigned to a task group, so-called <i>hidden</i> tasks, can be included in the report * by enabling the command line option {@code --all}. */ public class TaskReportTask extends AbstractReportTask { private TaskReportRenderer renderer = new TaskReportRenderer(); private boolean detail; @Override public ReportRenderer getRenderer() { return renderer; } public void setRenderer(TaskReportRenderer renderer) { this.renderer = renderer; } @Option(option = "all", description = "Show additional tasks and detail.") public void setShowDetail(boolean detail) { this.detail = detail; } @Console public boolean isDetail() { return detail; } @Override public void generate(Project project) throws IOException { renderer.showDetail(isDetail()); renderer.addDefaultTasks(project.getDefaultTasks()); AggregateMultiProjectTaskReportModel aggregateModel = new AggregateMultiProjectTaskReportModel(!isDetail(), isDetail()); TaskDetailsFactory taskDetailsFactory = new TaskDetailsFactory(project); SingleProjectTaskReportModel projectTaskModel = new SingleProjectTaskReportModel(taskDetailsFactory); projectTaskModel.build(getProjectTaskLister().listProjectTasks(project)); aggregateModel.add(projectTaskModel); for (Project subproject : project.getSubprojects()) { SingleProjectTaskReportModel subprojectTaskModel = new SingleProjectTaskReportModel(taskDetailsFactory); subprojectTaskModel.build(getProjectTaskLister().listProjectTasks(subproject)); aggregateModel.add(subprojectTaskModel); } aggregateModel.build(); DefaultGroupTaskReportModel model = new DefaultGroupTaskReportModel(); model.build(aggregateModel); for (String group : model.getGroups()) { renderer.startTaskGroup(group); for (TaskDetails task : model.getTasksForGroup(group)) { renderer.addTask(task); } } renderer.completeTasks(); for (Rule rule : project.getTasks().getRules()) { renderer.addRule(rule); } } @Inject protected ProjectTaskLister getProjectTaskLister() { throw new UnsupportedOperationException(); } }