From e37930253d9fe343d67f28c1c4e30a1dea21473f Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 15 Feb 2016 17:14:16 -0800 Subject: [PATCH] Fix variants. --- .../src/main/kotlin/com/beust/kobalt/Variant.kt | 6 ++++-- .../kotlin/com/beust/kobalt/api/TaskContributor.kt | 3 +-- .../com/beust/kobalt/internal/IncrementalManager.kt | 6 +++++- .../com/beust/kobalt/internal/JvmCompilerPlugin.kt | 11 ++++++----- 4 files changed, 16 insertions(+), 10 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 4b8c5441..f3321bbd 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 @@ -37,7 +37,7 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, } fun sourceDirectories(project: Project, context: KobaltContext) : List { - val result = hashSetOf() + val result = arrayListOf() val compilerContributors = ActorUtils.selectAffinityActors(project, context, context.pluginInfo.compilerContributors) compilerContributors.forEach { @@ -53,6 +53,7 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, * Might be used by plug-ins. */ fun resourceDirectories(project: Project) = sourceDirectories(project, "resources", variantFirst = false) + .filter { it.path.contains("resources") || it.path.contains("res") } /** * suffix is either "java" (to find source files) or "resources" (to find resources). @@ -97,7 +98,8 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, val filteredResult = result.filter { File(project.directory, it.path).exists() } val sortedResult = if (variantFirst) filteredResult else filteredResult.reversed().toList() - return LinkedHashSet(sortedResult).toList() + val deduplicatedResult = LinkedHashSet(sortedResult).toList() + return deduplicatedResult } fun archiveName(project: Project, archiveName: String?, suffix: String) : String { 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 e2a4a30c..6b2426f9 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 @@ -46,12 +46,11 @@ class TaskContributor @Inject constructor(val incrementalManager: IncrementalMan runTask: (Project) -> IncrementalTaskInfo) { Variant.allVariants(project).forEach { variant -> val variantTaskName = variant.toTask(taskName) - context.variant = variant dynamicTasks.add(DynamicTask(plugin, variantTaskName, variantTaskName, runBefore = runBefore.map { variant.toTask(it) }, runAfter = runAfter.map { variant.toTask(it) }, alwaysRunAfter = alwaysRunAfter.map { variant.toTask(it) }, - closure = incrementalManager.toIncrementalTaskClosure(taskName, runTask))) + closure = incrementalManager.toIncrementalTaskClosure(taskName, runTask, variant))) } } 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 a8e66017..94d7a1b7 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 @@ -2,6 +2,8 @@ package com.beust.kobalt.internal import com.beust.kobalt.IncrementalTaskInfo import com.beust.kobalt.TaskResult +import com.beust.kobalt.Variant +import com.beust.kobalt.api.Kobalt import com.beust.kobalt.api.Project import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.log @@ -74,9 +76,11 @@ class IncrementalManager(val fileName: String = IncrementalManager.BUILD_INFO_FI * @return a closure that invokes that method and decide whether to run the task or not based * on the content of that IncrementalTaskInfo */ - fun toIncrementalTaskClosure(shortTaskName: String, method: (Project) -> IncrementalTaskInfo) + fun toIncrementalTaskClosure(shortTaskName: String, method: (Project) -> IncrementalTaskInfo, + variant: Variant = Variant()) : (Project) -> TaskResult { return { project: Project -> + Kobalt.context?.variant = variant val iit = method(project) val taskName = project.name + ":" + shortTaskName var upToDate = false 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 4fc0b184..cfb4f637 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 @@ -113,13 +113,14 @@ open class JvmCompilerPlugin @Inject constructor( throw IllegalArgumentException("Custom source sets not supported yet: $sourceSet") } - if (sourceDirs.size > 0) { + val variantSourceDirs = context.variant.resourceDirectories(project) + if (variantSourceDirs.size > 0) { lp(project, "Copying $sourceSet resources") val absOutputDir = File(KFiles.joinDir(project.directory, project.buildDirectory, outputDir)) - sourceDirs.map { File(project.directory, it) }.filter { + variantSourceDirs.map { File(project.directory, it.path) }.filter { it.exists() }.forEach { - log(2, "Copying from $sourceDirs to $absOutputDir") + log(2, "Copying from $it to $absOutputDir") KFiles.copyRecursively(it, absOutputDir, deleteFirst = false) } } else { @@ -241,7 +242,7 @@ open class JvmCompilerPlugin @Inject constructor( * Runs all the contributors and interceptors relevant to that task. */ protected fun createCompilerActionInfo(project: Project, context: KobaltContext, isTest: Boolean, - sourceDirectories: Set, sourceSuffixes: List): CompilerActionInfo { + sourceDirectories: List, sourceSuffixes: List): CompilerActionInfo { copyResources(project, JvmCompilerPlugin.SOURCE_SET_MAIN) val fullClasspath = if (isTest) dependencyManager.testDependencies(project, context) @@ -312,7 +313,7 @@ open class JvmCompilerPlugin @Inject constructor( return result } - val sourceDirectories = hashSetOf() + val sourceDirectories = arrayListOf() // ISourceDirectoryContributor override fun sourceDirectoriesFor(project: Project, context: KobaltContext)