From 32f1f084a201f43c7615cae936b4794602ad0d0d Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 16 Nov 2015 00:02:44 -0800 Subject: [PATCH] Generate BuildConfig. --- src/main/kotlin/com/beust/kobalt/Variant.kt | 38 +++++++++++++++++-- .../kobalt/internal/JvmCompilerPlugin.kt | 28 +++----------- .../kobalt/plugin/java/JavaProjectInfo.kt | 1 + 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/Variant.kt b/src/main/kotlin/com/beust/kobalt/Variant.kt index 98a10ac1..ec696d8c 100644 --- a/src/main/kotlin/com/beust/kobalt/Variant.kt +++ b/src/main/kotlin/com/beust/kobalt/Variant.kt @@ -1,8 +1,6 @@ package com.beust.kobalt -import com.beust.kobalt.api.BuildTypeConfig -import com.beust.kobalt.api.ProductFlavorConfig -import com.beust.kobalt.api.Project +import com.beust.kobalt.api.* import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.log import java.io.File @@ -32,6 +30,13 @@ class Variant(val productFlavor: ProductFlavorConfig? = null, val buildType: Bui log(2, "Adding source for product flavor ${it.name}: ${dir.path}") result.add(dir) } + + // Generated directory, if applicable + generatedSourceDirectory?.let { + result.add(it) + } + + // Now that all the variant source directories have been added, add the project's default ones result.addAll(sourceDirectories) return result } @@ -56,4 +61,31 @@ class Variant(val productFlavor: ProductFlavorConfig? = null, val buildType: Bui get() { return productFlavor?.buildConfig != null || buildType?.buildConfig != null } + + var generatedSourceDirectory: File? = null + + /** + * If either the Project or the current variant has a build config defined, generate BuildConfig.java + */ + fun maybeGenerateBuildConfig(project: Project, context: KobaltContext) { + fun generated(project: Project) = KFiles.joinDir(project.buildDirectory!!, "generated", "source") + + if (project.buildConfig != null || context.variant.hasBuildConfig) { + val buildConfigs = arrayListOf() + if (project.buildConfig != null) buildConfigs.add(project.buildConfig!!) + with (context.variant) { + if (buildType?.buildConfig != null) buildConfigs.add(buildType?.buildConfig!!) + if (productFlavor?.buildConfig != null) buildConfigs.add(productFlavor?.buildConfig!!) + } + var pkg = project.packageName ?: project.group + ?: throw KobaltException( + "packageName needs to be defined on the project in order to generate BuildConfig") + val code = project.projectInfo.generateBuildConfig(pkg, context.variant, buildConfigs) + generatedSourceDirectory = KFiles.makeDir(generated(project), pkg.replace('.', File.separatorChar)) + val outputFile = File(generatedSourceDirectory, "BuildConfig" + project .sourceSuffix) + KFiles.saveFile(outputFile, code) + log(2, "Generated ${outputFile.path}") + } + } + } \ No newline at end of file diff --git a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 61f7235e..044ad6b7 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -1,8 +1,10 @@ package com.beust.kobalt.internal -import com.beust.kobalt.KobaltException import com.beust.kobalt.TaskResult -import com.beust.kobalt.api.* +import com.beust.kobalt.api.BasePlugin +import com.beust.kobalt.api.IProjectContributor +import com.beust.kobalt.api.KobaltContext +import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.ExportedProjectProperty import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.maven.* @@ -148,30 +150,10 @@ abstract class JvmCompilerPlugin @Inject constructor( @Task(name = JavaPlugin.TASK_COMPILE, description = "Compile the project") fun taskCompile(project: Project) : TaskResult { - maybeGenerateBuildConfig(project) + context.variant.maybeGenerateBuildConfig(project, context) return doCompile(project, createCompilerActionInfo(project, context)) } - /** - * If either the Project or the current variant has a build config defined, generate BuildConfig.java - */ - private fun maybeGenerateBuildConfig(project: Project) { - println("Maybe generate build config") - if (project.buildConfig != null || context.variant.hasBuildConfig) { - val buildConfigs = arrayListOf() - if (project.buildConfig != null) buildConfigs.add(project.buildConfig!!) - with (context.variant) { - if (buildType?.buildConfig != null) buildConfigs.add(buildType?.buildConfig!!) - if (productFlavor?.buildConfig != null) buildConfigs.add(productFlavor?.buildConfig!!) - } - var pkg = project.packageName ?: project.group - ?: throw KobaltException("packageName needs to be defined on the project in order to generate " + - "BuildConfig") - val code = project.projectInfo.generateBuildConfig(pkg, context.variant, buildConfigs) - println("Generating: " + code) - } - } - @Task(name = JavaPlugin.TASK_JAVADOC, description = "Run Javadoc") fun taskJavadoc(project: Project) = doJavadoc(project, createCompilerActionInfo(project, context)) diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt index ad370a33..ba74e206 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt @@ -32,6 +32,7 @@ class JavaProjectInfo : IProjectInfo { } } add("}") + add("") } return lines.joinToString("\n")