From 49041faa98d79ffc58d36d9e580655d750dfac60 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 23 May 2016 21:26:17 -0800 Subject: [PATCH] Fix Variant bug. --- .../main/kotlin/com/beust/kobalt/Variant.kt | 15 ++++++------- .../com/beust/kobalt/api/BuildTypeConfig.kt | 10 +-------- .../com/beust/kobalt/api/DependencyHolder.kt | 9 +++++--- .../beust/kobalt/api/IDependencyManager.kt | 2 +- .../com/beust/kobalt/api/KobaltContext.kt | 2 +- .../beust/kobalt/api/ProductFlavorConfig.kt | 12 ++--------- .../kotlin/com/beust/kobalt/api/Project.kt | 21 +++++++++++++++++-- .../kobalt/internal/IncrementalManager.kt | 2 +- .../com/beust/kobalt/internal/TaskManager.kt | 2 +- .../beust/kobalt/maven/DependencyManager.kt | 10 ++++----- .../com/beust/kobalt/misc/CheckVersions.kt | 6 +++--- 11 files changed, 48 insertions(+), 43 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/Variant.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/Variant.kt index f4002c36..ea3ea5f3 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/Variant.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/Variant.kt @@ -30,11 +30,11 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, * for {internal, release}, return [internalRelease, internal, release] */ fun allDirectories(project: Project): List { - val result = arrayListOf() - result.add(toCamelcaseDir()) - if (productFlavor != null) result.add(productFlavor.name) - if (buildType != null) result.add(buildType.name) - return result + return arrayListOf().apply { + add(toCamelcaseDir()) + add(productFlavor.name) + add(buildType.name) + } } fun sourceDirectories(project: Project, context: KobaltContext, sourceSet: SourceSet) : List { @@ -187,9 +187,10 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, override fun toString() = toTask("") + companion object { - val DEFAULT_PRODUCT_FLAVOR = ProductFlavorConfig(null, "") - val DEFAULT_BUILD_TYPE = BuildTypeConfig(null, "") + val DEFAULT_PRODUCT_FLAVOR = ProductFlavorConfig("") + val DEFAULT_BUILD_TYPE = BuildTypeConfig("") fun allVariants(project: Project): List { val result = arrayListOf() diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/BuildTypeConfig.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/BuildTypeConfig.kt index 7d627fd5..2db3d939 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/BuildTypeConfig.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/BuildTypeConfig.kt @@ -1,9 +1,7 @@ package com.beust.kobalt.api -import com.beust.kobalt.api.annotation.Directive +class BuildTypeConfig(val name: String) : IBuildConfig, IDependencyHolder by DependencyHolder() { -class BuildTypeConfig(val project: Project?, val name: String) : IBuildConfig, - IDependencyHolder by DependencyHolder(project) { var minifyEnabled = false var applicationIdSuffix: String? = null var proguardFile: String? = null @@ -11,9 +9,3 @@ class BuildTypeConfig(val project: Project?, val name: String) : IBuildConfig, override var buildConfig : BuildConfig? = BuildConfig() } -@Directive -fun Project.buildType(name: String, init: BuildTypeConfig.() -> Unit) = BuildTypeConfig(this, name).apply { - init() - addBuildType(name, this) -} - diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/DependencyHolder.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/DependencyHolder.kt index f958d66b..bf88494a 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/DependencyHolder.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/DependencyHolder.kt @@ -5,9 +5,11 @@ import java.util.* /** * Various elements in a build file let you specify dependencies: projects, buildType and productFlavor. - * They all implement this interface and delegate to an instance of the concrete class below. + * They all implement this interface and delegate to an instance of the `DependencyHolder` concrete class. */ interface IDependencyHolder { + var project: Project + val compileDependencies : ArrayList val compileProvidedDependencies : ArrayList val compileRuntimeDependencies : ArrayList @@ -20,7 +22,8 @@ interface IDependencyHolder { fun dependencies(init: Dependencies.() -> Unit) : Dependencies } -open class DependencyHolder(val project: Project?) : IDependencyHolder { +open class DependencyHolder : IDependencyHolder { + override lateinit var project: Project override val compileDependencies : ArrayList = arrayListOf() override val compileProvidedDependencies : ArrayList = arrayListOf() override val compileRuntimeDependencies : ArrayList = arrayListOf() @@ -29,7 +32,7 @@ open class DependencyHolder(val project: Project?) : IDependencyHolder { override var dependencies : Dependencies? = null override fun dependencies(init: Dependencies.() -> Unit) : Dependencies { - dependencies = Dependencies(project!!, compileDependencies, compileProvidedDependencies, + dependencies = Dependencies(project, compileDependencies, compileProvidedDependencies, compileRuntimeDependencies, excludedDependencies) dependencies!!.init() return dependencies!! diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt index aec3b3db..76183629 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt @@ -7,7 +7,7 @@ interface IDependencyManager { /** * Parse the id and return the correct IClasspathDependency */ - fun create(id: String, project: Project? = null): IClasspathDependency + fun create(id: String, projectDirectory: String? = null): IClasspathDependency /** * Create an IClasspathDependency from a Maven id. diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt index 292bb255..5868f885 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/KobaltContext.kt @@ -10,7 +10,7 @@ import com.beust.kobalt.misc.KobaltExecutors import java.io.File class KobaltContext(val args: Args) { - var variant: Variant = Variant() + lateinit var variant: Variant val profiles = arrayListOf() init { diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ProductFlavorConfig.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ProductFlavorConfig.kt index 01877889..86c69301 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ProductFlavorConfig.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ProductFlavorConfig.kt @@ -1,17 +1,9 @@ package com.beust.kobalt.api -import com.beust.kobalt.api.annotation.Directive - -class ProductFlavorConfig(val project: Project?, val name: String) : IBuildConfig, - IDependencyHolder by DependencyHolder(project) { +class ProductFlavorConfig(val name: String) : IBuildConfig, + IDependencyHolder by DependencyHolder() { var applicationId: String? = null override var buildConfig : BuildConfig? = BuildConfig() } -@Directive -fun Project.productFlavor(name: String, init: ProductFlavorConfig.() -> Unit) = ProductFlavorConfig(this, name).apply { - init() - addProductFlavor(name, this) -} - diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt index d42ee5df..a004071a 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -23,7 +23,11 @@ open class Project( @Directive open var url: String? = null, @Directive open var licenses: List = arrayListOf(), @Directive open var packageName: String? = group) - : IBuildConfig, IDependencyHolder by DependencyHolder(null) { + : IBuildConfig, IDependencyHolder by DependencyHolder() { + + init { + this.project = this + } class ProjectExtra(project: Project) { val dependsOn = arrayListOf() @@ -142,7 +146,7 @@ class Dependencies(val project: Project, */ private fun addToDependencies(project: Project, dependencies: ArrayList, dep: Array): List> - = with(dep.map { DependencyManager.create(it, project)}) { + = with(dep.map { DependencyManager.create(it, project.directory)}) { dependencies.addAll(this) this.map { FutureTask { it.jarFile.get() } } } @@ -201,3 +205,16 @@ fun Project.defaultConfig(init: BuildConfig.() -> Unit) = let { project -> project.defaultConfig = this } } + +@Directive +fun Project.buildType(name: String, init: BuildTypeConfig.() -> Unit) = BuildTypeConfig(name).apply { + init() + addBuildType(name, this) +} + + +@Directive +fun Project.productFlavor(name: String, init: ProductFlavorConfig.() -> Unit) = ProductFlavorConfig(name).apply { + init() + addProductFlavor(name, this) +} diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt index f74c9e61..bc53592e 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt @@ -85,7 +85,7 @@ class IncrementalManager @Inject constructor(val args: Args, @Assisted val fileN * on the content of that IncrementalTaskInfo */ fun toIncrementalTaskClosure(shortTaskName: String, method: (Project) -> IncrementalTaskInfo, - variant: Variant = Variant()): (Project) -> TaskResult { + variant: Variant): (Project) -> TaskResult { return { project: Project -> Kobalt.context?.variant = variant val iti = method(project) 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 d01f2e47..2039c9e1 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 @@ -320,7 +320,7 @@ class TaskManager @Inject constructor(val args: Args, ta.runBefore, ta.runAfter, ta.alwaysRunAfter, incrementalManagerFactory.create().toIncrementalTaskClosure(ta.name, { project -> method.invoke(plugin, project) as IncrementalTaskInfo - })) + }, Variant())) /** Tasks annotated with @Task or @IncrementalTask */ val annotationTasks = arrayListOf() diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt index f92fa8db..93d997ed 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt @@ -18,22 +18,22 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, val : IDependencyManager { companion object { - fun create(id: String, project: Project? = null) = - Kobalt.INJECTOR.getInstance(DependencyManager::class.java).create(id, project) + fun create(id: String, projectDirectory: String? = null) = + Kobalt.INJECTOR.getInstance(DependencyManager::class.java).create(id, projectDirectory) } /** * Parse the id and return the correct IClasspathDependency */ - override fun create(id: String, project: Project?) : IClasspathDependency { + override fun create(id: String, projectDirectory: String?) : IClasspathDependency { if (id.startsWith(FileDependency.PREFIX_FILE)) { - val path = if (project?.directory != null) { + val path = if (projectDirectory != null) { val idPath = id.substring(FileDependency.PREFIX_FILE.length) if (! File(idPath).isAbsolute) { // If the project directory is relative, we might not be in the correct directory to locate // that file, so we'll use the absolute directory deduced from the build file path. Pick // the first one that produces an actual file - val result = listOf(File(project!!.directory), Kobalt.context?.internalContext?.absoluteDir).map { + val result = listOf(File(projectDirectory), Kobalt.context?.internalContext?.absoluteDir).map { File(it, idPath) }.first { it.exists() diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/CheckVersions.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/CheckVersions.kt index 2f73266b..6a2fe748 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/CheckVersions.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/CheckVersions.kt @@ -17,12 +17,12 @@ public class CheckVersions @Inject constructor(val depManager: DependencyManager val executor = executors.newExecutor("CheckVersions", 5) val newVersions = hashSetOf() - projects.forEach { - listOf(it.compileDependencies, it.testDependencies).forEach { cds -> + projects.forEach { project -> + listOf(project.compileDependencies, project.testDependencies).forEach { cds -> cds.forEach { compileDependency -> if (MavenId.isMavenId(compileDependency.id)) { try { - val dep = depManager.create(compileDependency.shortId) + val dep = depManager.create(compileDependency.shortId, project.directory) val other = compileDependency as AetherDependency if (dep.id != compileDependency.id && Versions.toLongVersion(dep.version) > Versions.toLongVersion(other.version)) {