diff --git a/src/main/kotlin/com/beust/kobalt/api/Plugin.kt b/src/main/kotlin/com/beust/kobalt/api/Plugin.kt index 5978b6ce..5b5ead57 100644 --- a/src/main/kotlin/com/beust/kobalt/api/Plugin.kt +++ b/src/main/kotlin/com/beust/kobalt/api/Plugin.kt @@ -33,13 +33,9 @@ public interface Plugin { return TaskResult2(taskResult.success, this) } }) - runBefore.forEach { dependsOn(it, name) } - runAfter.forEach { dependsOn(name, it) } + runBefore.forEach { taskManager.runBefore(it, name) } + runAfter.forEach { taskManager.runBefore(name, it) } } var taskManager : TaskManager - - fun dependsOn(task1: String, task2: String) { - taskManager.dependsOn(task1, task2) - } } diff --git a/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt b/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt index 779854de..0c41fb31 100644 --- a/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt +++ b/src/main/kotlin/com/beust/kobalt/api/PluginTask.kt @@ -9,7 +9,8 @@ abstract public class PluginTask : Callable> { open val name: String = "" open val doc: String = "" abstract val project: Project - val dependsOn = arrayListOf() + val runBefore = arrayListOf() + val runAfter = arrayListOf() override public fun toString() : String { return ToString("PluginTask", "id", project.name + ":" + name).s diff --git a/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index f080f803..7bcf06fc 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -14,14 +14,19 @@ import javax.inject.Singleton @Singleton public class TaskManager @Inject constructor(val plugins: Plugins, val args: Args) : KobaltLogger { - private val dependentTaskMap = TreeMultimap.create() + private val runBefore = TreeMultimap.create() + private val runAfter= TreeMultimap.create() /** * Called by plugins to indicate task dependencies defined at runtime. Keys depend on values. * Declare that `task1` depends on `task2`. */ - fun dependsOn(task1: String, task2: String) { - dependentTaskMap.put(task1, task2) + fun runBefore(task1: String, task2: String) { + runBefore.put(task1, task2) + } + + fun runAfter(task1: String, task2: String) { + runAfter.put(task1, task2) } class TaskInfo(val id: String) { @@ -47,22 +52,22 @@ public class TaskManager @Inject constructor(val plugins: Plugins, val args: Arg // plugins.allTasks.filter { it.project.name == project.name }.forEach { rt -> tasksByNames.put(rt.name, rt) - if (rt.dependsOn.size() > 0) { - rt.dependsOn.forEach { d -> - dependentTaskMap.put(rt.name, d) + if (rt.runBefore.size() > 0) { + rt.runBefore.forEach { d -> + runBefore.put(rt.name, d) } } } val freeTaskMap = hashMapOf() tasksByNames.keySet().forEach { - if (!dependentTaskMap.containsKey(it)) freeTaskMap.put(it, tasksByNames.get(it).elementAt(0)) + if (! runBefore.containsKey(it)) freeTaskMap.put(it, tasksByNames.get(it).elementAt(0)) } log(2, "Free tasks: ${freeTaskMap.keySet()}") log(2, "Dependent tasks:") - dependentTaskMap.keySet().forEach { t -> - log(2, " ${t} -> ${dependentTaskMap.get(t)}}") + runBefore.keySet().forEach { t -> + log(2, " ${t} -> ${runBefore.get(t)}}") } // @@ -102,7 +107,7 @@ public class TaskManager @Inject constructor(val plugins: Plugins, val args: Arg throw KobaltException("Unknown task: ${target}") } tasks.forEach { task -> - val dependencyNames = dependentTaskMap.get(task.name) + val dependencyNames = runBefore.get(task.name) dependencyNames.forEach { dependencyName -> if (!seen.contains(dependencyName)) { newToProcess.add(dependencyName) @@ -127,7 +132,7 @@ public class TaskManager @Inject constructor(val plugins: Plugins, val args: Arg // val graph = DynamicGraph() freeTaskMap.values().filter { transitiveClosure.contains(it.name) } forEach { graph.addNode(it) } - dependentTaskMap.entries().filter { + runBefore.entries().filter { transitiveClosure.contains(it.key) }.forEach { entry -> plugins.findTasks(entry.key).filter { it.project.name == project.name }.forEach { from -> diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt index 8912dfdd..59754056 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -3,12 +3,15 @@ package com.beust.kobalt.plugin.kotlin import com.beust.kobalt.Plugins import com.beust.kobalt.api.ICompilerInfo import com.beust.kobalt.api.Kobalt +import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.internal.TaskResult +import com.beust.kobalt.internal.TaskResult2 import com.beust.kobalt.maven.* +import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.KobaltLogger import com.beust.kobalt.plugin.java.JavaProject @@ -19,7 +22,7 @@ import javax.inject.Singleton @Singleton public class KotlinPlugin @Inject constructor( override val localRepo: LocalRepo, - override val files: com.beust.kobalt.misc.KFiles, + override val files: KFiles, override val depFactory: DepFactory, override val dependencyManager: DependencyManager, override val executors: KobaltExecutors) @@ -29,6 +32,14 @@ public class KotlinPlugin @Inject constructor( Kobalt.registerCompiler(KotlinCompilerInfo()) } + override fun apply(project: Project, context: KobaltContext) { + log(1, "ADD SYNTH TASK") +// addTask(project, "syntheticTask", "A dynamic task", runBefore = listOf("clean")) { p: Project -> +// println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Synthetic task") +// TaskResult() +// } + } + companion object { public const val TASK_COMPILE: String = "compile" public const val TASK_COMPILE_TEST: String = "compileTest"