1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Generate BuildConfig.

This commit is contained in:
Cedric Beust 2015-11-16 00:02:44 -08:00
parent b6b2b655fb
commit 32f1f084a2
3 changed files with 41 additions and 26 deletions

View file

@ -1,8 +1,6 @@
package com.beust.kobalt package com.beust.kobalt
import com.beust.kobalt.api.BuildTypeConfig import com.beust.kobalt.api.*
import com.beust.kobalt.api.ProductFlavorConfig
import com.beust.kobalt.api.Project
import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log import com.beust.kobalt.misc.log
import java.io.File 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}") log(2, "Adding source for product flavor ${it.name}: ${dir.path}")
result.add(dir) 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) result.addAll(sourceDirectories)
return result return result
} }
@ -56,4 +61,31 @@ class Variant(val productFlavor: ProductFlavorConfig? = null, val buildType: Bui
get() { get() {
return productFlavor?.buildConfig != null || buildType?.buildConfig != null 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<BuildConfig>()
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}")
}
}
} }

View file

@ -1,8 +1,10 @@
package com.beust.kobalt.internal package com.beust.kobalt.internal
import com.beust.kobalt.KobaltException
import com.beust.kobalt.TaskResult 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.ExportedProjectProperty
import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.maven.* import com.beust.kobalt.maven.*
@ -148,30 +150,10 @@ abstract class JvmCompilerPlugin @Inject constructor(
@Task(name = JavaPlugin.TASK_COMPILE, description = "Compile the project") @Task(name = JavaPlugin.TASK_COMPILE, description = "Compile the project")
fun taskCompile(project: Project) : TaskResult { fun taskCompile(project: Project) : TaskResult {
maybeGenerateBuildConfig(project) context.variant.maybeGenerateBuildConfig(project, context)
return doCompile(project, createCompilerActionInfo(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<BuildConfig>()
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") @Task(name = JavaPlugin.TASK_JAVADOC, description = "Run Javadoc")
fun taskJavadoc(project: Project) = doJavadoc(project, createCompilerActionInfo(project, context)) fun taskJavadoc(project: Project) = doJavadoc(project, createCompilerActionInfo(project, context))

View file

@ -32,6 +32,7 @@ class JavaProjectInfo : IProjectInfo {
} }
} }
add("}") add("}")
add("")
} }
return lines.joinToString("\n") return lines.joinToString("\n")