From a118d3680bcfa6d4a322ff3cf157c7e0e83861d8 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 4 Feb 2016 22:32:06 +0400 Subject: [PATCH] Introducing project{}. --- .../beust/kobalt/internal/BaseJvmPlugin.kt | 23 +++---------------- .../kobalt/internal/JvmCompilerPlugin.kt | 22 +++++++++++++++--- .../beust/kobalt/plugin/java/JavaPlugin.kt | 4 +++- .../kobalt/plugin/kotlin/KotlinPlugin.kt | 4 +++- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt index d9d80c27..7a32a6ff 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt @@ -1,26 +1,9 @@ package com.beust.kobalt.internal -import com.beust.kobalt.api.* +import com.beust.kobalt.api.ConfigPlugin +import com.beust.kobalt.api.ICompilerFlagContributor /** * Base class for JVM language plug-ins. */ -abstract class BaseJvmPlugin: ConfigPlugin(), IProjectContributor, ICompilerFlagContributor { - - override fun apply(project: Project, context: KobaltContext) { - super.apply(project, context) - project.projectProperties.put(JvmCompilerPlugin.DEPENDENT_PROJECTS, projects()) - } - - private val allProjects = arrayListOf() - - fun addDependentProjects(project: Project, dependents: List) { - project.projectExtra.dependsOn.addAll(dependents) - with(ProjectDescription(project, dependents)) { - allProjects.add(this) - } - } - - // IProjectContributor - override fun projects() = allProjects -} +abstract class BaseJvmPlugin: ConfigPlugin(), ICompilerFlagContributor \ No newline at end of file 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 39b432aa..22982667 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 @@ -4,6 +4,7 @@ import com.beust.kobalt.IncrementalTaskInfo import com.beust.kobalt.KobaltException import com.beust.kobalt.TaskResult import com.beust.kobalt.api.* +import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.ExportedProjectProperty import com.beust.kobalt.api.annotation.IncrementalTask import com.beust.kobalt.api.annotation.Task @@ -36,6 +37,8 @@ open class JvmCompilerPlugin @Inject constructor( : BasePlugin(), ISourceDirectoryContributor, IProjectContributor, ITaskContributor by taskContributor { companion object { + val PLUGIN_NAME = "JvmCompiler" + @ExportedProjectProperty(doc = "Projects this project depends on", type = "List") const val DEPENDENT_PROJECTS = "dependentProjects" @@ -52,7 +55,7 @@ open class JvmCompilerPlugin @Inject constructor( const val DOCS_DIRECTORY = "docs/javadoc" } - override val name: String = "JvmCompiler" + override val name: String = PLUGIN_NAME override fun accept(project: Project) = true @@ -184,8 +187,13 @@ open class JvmCompilerPlugin @Inject constructor( val allProjects = arrayListOf() - override fun projects() : List { - return allProjects + override fun projects() = allProjects + + fun addDependentProjects(project: Project, dependents: List) { + project.projectExtra.dependsOn.addAll(dependents) + with(ProjectDescription(project, dependents)) { + allProjects.add(this) + } } @Task(name = "doc", description = "Generate the documentation for the project") @@ -301,3 +309,11 @@ open class JvmCompilerPlugin @Inject constructor( open val compiler: ICompilerContributor? = null } +@Directive +public fun project(vararg projects: Project, init: Project.() -> Unit): Project { + return Project("").apply { + init() + (Kobalt.findPlugin(JvmCompilerPlugin.PLUGIN_NAME) as JvmCompilerPlugin) + .addDependentProjects(this, projects.toList()) + } +} diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt index 1d78c418..e94f1f7b 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt @@ -5,6 +5,7 @@ import com.beust.kobalt.Variant import com.beust.kobalt.api.* import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.internal.BaseJvmPlugin +import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.misc.warn import java.io.File import javax.inject.Inject @@ -76,7 +77,8 @@ class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler) public fun javaProject(vararg projects: Project, init: JavaProject.() -> Unit): JavaProject { return JavaProject().apply { init() - (Kobalt.findPlugin(JavaPlugin.PLUGIN_NAME) as JavaPlugin).addDependentProjects(this, projects.toList()) + (Kobalt.findPlugin(JvmCompilerPlugin.PLUGIN_NAME) as JvmCompilerPlugin) + .addDependentProjects(this, projects.toList()) } } 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 3ac0e108..733c2186 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -5,6 +5,7 @@ import com.beust.kobalt.Variant import com.beust.kobalt.api.* import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.internal.BaseJvmPlugin +import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.maven.dependency.FileDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.KobaltExecutors @@ -142,7 +143,8 @@ class KotlinPlugin @Inject constructor(val executors: KobaltExecutors) fun kotlinProject(vararg projects: Project, init: KotlinProject.() -> Unit): KotlinProject { return KotlinProject().apply { init() - (Kobalt.findPlugin(KotlinPlugin.PLUGIN_NAME) as KotlinPlugin).addDependentProjects(this, projects.toList()) + (Kobalt.findPlugin(JvmCompilerPlugin.PLUGIN_NAME) as JvmCompilerPlugin) + .addDependentProjects(this, projects.toList()) } }