From b53df9bcce2e576504169cd3da251a7bc01a3e1a Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 5 May 2016 21:26:33 -0800 Subject: [PATCH] Add a "group" to the tasks. --- .../kotlin/com/beust/kobalt/BasePluginTask.kt | 3 ++- .../com/beust/kobalt/api/ITaskContributor.kt | 1 + .../kotlin/com/beust/kobalt/api/PluginTask.kt | 2 ++ .../com/beust/kobalt/api/TaskContributor.kt | 6 ++++-- .../beust/kobalt/api/annotation/Annotations.kt | 12 ++++++++++++ .../beust/kobalt/internal/JvmCompilerPlugin.kt | 16 ++++++++++------ .../com/beust/kobalt/internal/TaskManager.kt | 13 +++++++------ .../beust/kobalt/app/remote/DependencyData.kt | 4 ++-- .../plugin/application/ApplicationPlugin.kt | 2 +- .../kobalt/plugin/packaging/PackagingPlugin.kt | 5 +++-- 10 files changed, 44 insertions(+), 20 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BasePluginTask.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BasePluginTask.kt index 855d4271..e55f1b2a 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BasePluginTask.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BasePluginTask.kt @@ -4,8 +4,9 @@ import com.beust.kobalt.api.IPlugin import com.beust.kobalt.api.PluginTask import com.beust.kobalt.api.Project -public abstract class BasePluginTask(override val plugin: IPlugin, +abstract class BasePluginTask(override val plugin: IPlugin, override val name: String, override val doc: String, + override val group: String, override val project: Project) : PluginTask() diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ITaskContributor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ITaskContributor.kt index 113b0257..48f5173c 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ITaskContributor.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ITaskContributor.kt @@ -12,6 +12,7 @@ interface ITaskContributor : IContributor { } class DynamicTask(override val plugin: IPlugin, override val name: String, override val doc: String, + override val group: String, override val project: Project, val dependsOn: List = listOf(), val reverseDependsOn: List = listOf(), diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt index a2d2b7b7..b416f96b 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt @@ -8,11 +8,13 @@ interface ITask : Callable> { val project: Project val name: String val doc: String + val group: String } abstract class PluginTask : ITask { override val name: String = "" override open val doc: String = "" + override open val group: String = "other" override fun toString() = project.name + ":" + name } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt index 0d1c1333..2cae53fa 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt @@ -23,6 +23,7 @@ class TaskContributor @Inject constructor(val incrementalManagerFactory: Increme * depends on variants of that task. */ fun addVariantTasks(plugin: IPlugin, project: Project, context: KobaltContext, taskName: String, + group: String, dependsOn: List = emptyList(), reverseDependsOn : List = emptyList(), runBefore : List = emptyList(), @@ -30,7 +31,7 @@ class TaskContributor @Inject constructor(val incrementalManagerFactory: Increme runTask: (Project) -> TaskResult) { Variant.allVariants(project).forEach { variant -> val variantTaskName = variant.toTask(taskName) - dynamicTasks.add(DynamicTask(plugin, variantTaskName, variantTaskName, project, + dynamicTasks.add(DynamicTask(plugin, variantTaskName, variantTaskName, group, project, dependsOn = dependsOn.map { variant.toTask(it) }, reverseDependsOn = reverseDependsOn.map { variant.toTask(it) }, runBefore = runBefore.map { variant.toTask(it) }, @@ -43,6 +44,7 @@ class TaskContributor @Inject constructor(val incrementalManagerFactory: Increme } fun addIncrementalVariantTasks(plugin: IPlugin, project: Project, context: KobaltContext, taskName: String, + group: String, dependsOn: List = emptyList(), reverseDependsOn : List = emptyList(), runBefore : List = emptyList(), @@ -50,7 +52,7 @@ class TaskContributor @Inject constructor(val incrementalManagerFactory: Increme runTask: (Project) -> IncrementalTaskInfo) { Variant.allVariants(project).forEach { variant -> val variantTaskName = variant.toTask(taskName) - dynamicTasks.add(DynamicTask(plugin, variantTaskName, variantTaskName, project, + dynamicTasks.add(DynamicTask(plugin, variantTaskName, variantTaskName, group, project, dependsOn = dependsOn.map { variant.toTask(it) }, reverseDependsOn = reverseDependsOn.map { variant.toTask(it) }, runBefore = runBefore.map { variant.toTask(it) }, diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/annotation/Annotations.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/annotation/Annotations.kt index ff93b05d..baa87322 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/annotation/Annotations.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/annotation/Annotations.kt @@ -8,9 +8,15 @@ annotation class Directive @Retention(AnnotationRetention.RUNTIME) annotation class Task( + /* This task's name */ val name: String, + + /* The documentation for this task */ val description: String = "", + /** Used to show the task in the correct group in the IDE */ + val group: String = "other", + /** Dependency: tasks this task depends on */ val dependsOn: Array = arrayOf(), @@ -29,9 +35,15 @@ annotation class Task( @Retention(AnnotationRetention.RUNTIME) annotation class IncrementalTask( + /* This task's name */ val name: String, + + /* The documentation for this task */ val description: String = "", + /** Used to show the task in the correct group in the IDE */ + val group: String = "other", + /** Dependency: tasks this task depends on */ val dependsOn: Array = arrayOf(), diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 4f418343..db4519c0 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -48,6 +48,10 @@ open class JvmCompilerPlugin @Inject constructor( const val TASK_TEST = "test" const val DOCS_DIRECTORY = "docs/javadoc" + + const val GROUP_TEST = "test" + const val GROUP_BUILD = "build" + const val GROUP_DOCUMENTATION = "documentation" } override val name: String = PLUGIN_NAME @@ -64,7 +68,7 @@ open class JvmCompilerPlugin @Inject constructor( override fun apply(project: Project, context: KobaltContext) { super.apply(project, context) // cleanUpActors() - taskContributor.addIncrementalVariantTasks(this, project, context, "compile", + taskContributor.addIncrementalVariantTasks(this, project, context, "compile", GROUP_BUILD, runTask = { taskCompile(project) }) // @@ -77,7 +81,7 @@ open class JvmCompilerPlugin @Inject constructor( project.testConfigs.forEach { config -> val taskName = if (config.name.isEmpty()) TASK_TEST else TASK_TEST + config.name - taskManager.addTask(this, project, taskName, + taskManager.addTask(this, project, taskName, group = GROUP_TEST, dependsOn = listOf(JvmCompilerPlugin.TASK_COMPILE, JvmCompilerPlugin.TASK_COMPILE_TEST), task = { taskTest(project, config.name)} ) } @@ -98,7 +102,7 @@ open class JvmCompilerPlugin @Inject constructor( } } - @Task(name = TASK_CLEAN, description = "Clean the project") + @Task(name = TASK_CLEAN, description = "Clean the project", group = GROUP_BUILD) fun taskClean(project: Project): TaskResult { java.io.File(project.directory, project.buildDirectory).let { dir -> if (!dir.deleteRecursively()) { @@ -139,7 +143,7 @@ open class JvmCompilerPlugin @Inject constructor( } } - @IncrementalTask(name = TASK_COMPILE_TEST, description = "Compile the tests", + @IncrementalTask(name = TASK_COMPILE_TEST, description = "Compile the tests", group = GROUP_BUILD, dependsOn = arrayOf(TASK_COMPILE)) fun taskCompileTest(project: Project): IncrementalTaskInfo { sourceTestDirectories.addAll(context.variant.sourceDirectories(project, context, SourceSet.of(isTest = true))) @@ -155,7 +159,7 @@ open class JvmCompilerPlugin @Inject constructor( ) } - @IncrementalTask(name = JvmCompilerPlugin.TASK_COMPILE, description = "Compile the project", + @IncrementalTask(name = JvmCompilerPlugin.TASK_COMPILE, description = "Compile the project", group = GROUP_BUILD, runAfter = arrayOf(TASK_CLEAN)) fun taskCompile(project: Project): IncrementalTaskInfo { // Generate the BuildConfig before invoking sourceDirectories() since that call @@ -243,7 +247,7 @@ open class JvmCompilerPlugin @Inject constructor( project.projectProperties.put(DEPENDENT_PROJECTS, allProjects) } - @Task(name = "doc", description = "Generate the documentation for the project") + @Task(name = "doc", description = "Generate the documentation for the project", group = GROUP_DOCUMENTATION) fun taskJavadoc(project: Project): TaskResult { val docGenerator = ActorUtils.selectAffinityActor(project, context, context.pluginInfo.docContributors) if (docGenerator != null) { diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index 8f902b7c..bd117f8b 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -430,6 +430,7 @@ class TaskManager @Inject constructor(val args: Args, private val taskAnnotations = arrayListOf() class TaskAnnotation(val method: Method, val plugin: IPlugin, val name: String, val description: String, + val group: String, val dependsOn: Array, val reverseDependsOn: Array, val runBefore: Array, val runAfter: Array, val alwaysRunAfter: Array, @@ -441,7 +442,7 @@ class TaskManager @Inject constructor(val args: Args, * Invoking a @Task means simply calling the method and returning its returned TaskResult. */ fun toTaskAnnotation(method: Method, plugin: IPlugin, ta: Task) - = TaskAnnotation(method, plugin, ta.name, ta.description, ta.dependsOn, ta.reverseDependsOn, + = TaskAnnotation(method, plugin, ta.name, ta.description, ta.group, ta.dependsOn, ta.reverseDependsOn, ta.runBefore, ta.runAfter, ta.alwaysRunAfter, { project -> method.invoke(plugin, project) as TaskResult @@ -452,7 +453,7 @@ class TaskManager @Inject constructor(val args: Args, * of the returned IncrementalTaskInfo. */ fun toTaskAnnotation(method: Method, plugin: IPlugin, ta: IncrementalTask) - = TaskAnnotation(method, plugin, ta.name, ta.description, ta.dependsOn, ta.reverseDependsOn, + = TaskAnnotation(method, plugin, ta.name, ta.description, ta.group, ta.dependsOn, ta.reverseDependsOn, ta.runBefore, ta.runAfter, ta.alwaysRunAfter, incrementalManagerFactory.create().toIncrementalTaskClosure(ta.name, { project -> method.invoke(plugin, project) as IncrementalTaskInfo @@ -481,7 +482,7 @@ class TaskManager @Inject constructor(val args: Args, private fun installDynamicTasks(projects: List) { dynamicTasks.forEach { task -> projects.filter { task.plugin.accept(it) }.forEach { project -> - addTask(task.plugin, project, task.name, task.doc, + addTask(task.plugin, project, task.name, task.doc, task.group, task.dependsOn, task.reverseDependsOn, task.runBefore, task.runAfter, task.alwaysRunAfter, task.closure) } @@ -504,13 +505,13 @@ class TaskManager @Inject constructor(val args: Args, private fun addAnnotationTask(plugin: IPlugin, project: Project, annotation: TaskAnnotation, task: (Project) -> TaskResult) { - addTask(plugin, project, annotation.name, annotation.description, + addTask(plugin, project, annotation.name, annotation.description, annotation.group, annotation.dependsOn.toList(), annotation.reverseDependsOn.toList(), annotation.runBefore.toList(), annotation.runAfter.toList(), annotation.alwaysRunAfter.toList(), task) } - fun addTask(plugin: IPlugin, project: Project, name: String, description: String = "", + fun addTask(plugin: IPlugin, project: Project, name: String, description: String = "", group: String, dependsOn: List = listOf(), reverseDependsOn: List = listOf(), runBefore: List = listOf(), @@ -518,7 +519,7 @@ class TaskManager @Inject constructor(val args: Args, alwaysRunAfter: List = listOf(), task: (Project) -> TaskResult) { annotationTasks.add( - object : BasePluginTask(plugin, name, description, project) { + object : BasePluginTask(plugin, name, description, group, project) { override fun call(): TaskResult2 { val taskResult = task(project) return TaskResult2(taskResult.success, taskResult.errorMessage, this) diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/DependencyData.kt b/src/main/kotlin/com/beust/kobalt/app/remote/DependencyData.kt index a7ff91fa..7a4f4eec 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/DependencyData.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/DependencyData.kt @@ -56,7 +56,7 @@ class DependencyData @Inject constructor(val executors: KobaltExecutors, val dep val sources = project.sourceDirectories.partition { KFiles.isResource(it) } val tests = project.sourceDirectoriesTest.partition { KFiles.isResource(it) } val allTasks = taskManager.tasksByNames(project).values().map { - TaskData(it.name, it.doc) + TaskData(it.name, it.doc, it.group) } projectDatas.add(ProjectData(project.name, project.directory, dependentProjects, compileDependencies, testDependencies, @@ -72,7 +72,7 @@ class DependencyData @Inject constructor(val executors: KobaltExecutors, val dep // class DependencyData(val id: String, val scope: String, val path: String) - class TaskData(val name: String, val description: String) + class TaskData(val name: String, val description: String, val group: String) class ProjectData(val name: String, val directory: String, val dependentProjects: List, diff --git a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt index a4855109..38aa114e 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt @@ -48,7 +48,7 @@ class ApplicationPlugin @Inject constructor(val configActor: ConfigActor