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

IBuildConfigContributor.

Step toward removing javaProject/kotlinProject.
This commit is contained in:
Cedric Beust 2016-02-04 22:21:47 +04:00
parent 08f5fcd04b
commit 691e59f0cb
10 changed files with 63 additions and 27 deletions

View file

@ -139,18 +139,23 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null,
?: throw KobaltException( ?: throw KobaltException(
"packageName needs to be defined on the project in order to generate BuildConfig") "packageName needs to be defined on the project in order to generate BuildConfig")
val code = project.projectInfo.generateBuildConfig(project, context, pkg, this, buildConfigs) val contributor = ActorUtils.selectAffinityActor(context.pluginInfo.buildConfigContributors, project)
val result = KFiles.makeDir(KFiles.generatedSourceDir(project, this, "buildConfig")) if (contributor != null) {
// Make sure the generatedSourceDirectory doesn't contain the project.directory since val code = contributor.generateBuildConfig(project, context, pkg, this, buildConfigs)
// that directory will be added when trying to find recursively all the sources in it val result = KFiles.makeDir(KFiles.generatedSourceDir(project, this, "buildConfig"))
generatedSourceDirectory = File(result.relativeTo(File(project.directory))) // Make sure the generatedSourceDirectory doesn't contain the project.directory since
val outputGeneratedSourceDirectory = File(result, pkg.replace('.', File.separatorChar)) // that directory will be added when trying to find recursively all the sources in it
val compilers = ActorUtils.selectAffinityActors(project, context, context.pluginInfo.compilerContributors) generatedSourceDirectory = File(result.relativeTo(File(project.directory)))
val outputDir = File(outputGeneratedSourceDirectory, val outputGeneratedSourceDirectory = File(result, pkg.replace('.', File.separatorChar))
"BuildConfig" + compilers[0].sourceSuffixes[0]) val compilers = ActorUtils.selectAffinityActors(project, context, context.pluginInfo.compilerContributors)
KFiles.saveFile(outputDir, code) val outputDir = File(outputGeneratedSourceDirectory,
log(2, "Generated ${outputDir.path}") "BuildConfig" + compilers[0].sourceSuffixes[0])
return result KFiles.saveFile(outputDir, code)
log(2, "Generated ${outputDir.path}")
return result
} else {
throw KobaltException("Couldn't find a contributor to generate BuildConfig")
}
} else { } else {
return null return null
} }

View file

@ -0,0 +1,11 @@
package com.beust.kobalt.api
import com.beust.kobalt.Variant
/**
* Plug-ins that can generate a BuildConfig file.
*/
interface IBuildConfigContributor : ISimpleAffinity<Project> {
fun generateBuildConfig(project: Project, context: KobaltContext, packageName: String, variant: Variant,
buildConfigs: List<BuildConfig>) : String
}

View file

@ -2,7 +2,6 @@ package com.beust.kobalt.api
import com.beust.kobalt.TestConfig import com.beust.kobalt.TestConfig
import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.internal.IProjectInfo
import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.maven.dependency.MavenDependency
import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KFiles
import java.io.File import java.io.File
@ -21,8 +20,7 @@ open class Project(
@Directive open var scm : Scm? = null, @Directive open var scm : Scm? = null,
@Directive open var url: String? = null, @Directive open var url: String? = null,
@Directive open var licenses: List<License> = arrayListOf<License>(), @Directive open var licenses: List<License> = arrayListOf<License>(),
@Directive open var packageName: String? = group, @Directive open var packageName: String? = group) : IBuildConfig {
val projectInfo: IProjectInfo) : IBuildConfig {
class ProjectExtra(project: Project) { class ProjectExtra(project: Project) {
val suffixesFound : Set<String> by lazy { val suffixesFound : Set<String> by lazy {

View file

@ -75,6 +75,8 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
val buildConfigFieldContributors = arrayListOf<IBuildConfigFieldContributor>() val buildConfigFieldContributors = arrayListOf<IBuildConfigFieldContributor>()
val taskContributors = arrayListOf<ITaskContributor>() val taskContributors = arrayListOf<ITaskContributor>()
// Not documented yet
val buildConfigContributors = arrayListOf<IBuildConfigContributor>()
val mavenIdInterceptors = arrayListOf<IMavenIdInterceptor>() val mavenIdInterceptors = arrayListOf<IMavenIdInterceptor>()
companion object { companion object {
@ -158,6 +160,7 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
// Not documented yet // Not documented yet
if (this is IMavenIdInterceptor) mavenIdInterceptors.add(this) if (this is IMavenIdInterceptor) mavenIdInterceptors.add(this)
if (this is ITestSourceDirectoryContributor) testSourceDirContributors.add(this) if (this is ITestSourceDirectoryContributor) testSourceDirContributors.add(this)
if (this is IBuildConfigContributor) buildConfigContributors.add(this)
} }
} }
} }
@ -187,6 +190,7 @@ class PluginInfo(val xml: KobaltPluginXml, val classLoader: ClassLoader?) {
taskContributors.addAll(pluginInfo.taskContributors) taskContributors.addAll(pluginInfo.taskContributors)
testSourceDirContributors.addAll(pluginInfo.testSourceDirContributors) testSourceDirContributors.addAll(pluginInfo.testSourceDirContributors)
mavenIdInterceptors.addAll(pluginInfo.mavenIdInterceptors) mavenIdInterceptors.addAll(pluginInfo.mavenIdInterceptors)
buildConfigContributors.addAll(pluginInfo.buildConfigContributors)
} }
} }

View file

@ -1,10 +1,8 @@
package com.beust.kobalt.app.java package com.beust.kobalt.app.java
import com.beust.kobalt.app.BuildGenerator import com.beust.kobalt.app.BuildGenerator
import com.beust.kobalt.plugin.java.JavaProjectInfo
import com.google.inject.Inject
public class JavaBuildGenerator @Inject constructor (val projectInfo: JavaProjectInfo) : BuildGenerator() { public class JavaBuildGenerator: BuildGenerator() {
override val defaultSourceDirectories = hashSetOf("src/main/java") override val defaultSourceDirectories = hashSetOf("src/main/java")
override val defaultTestDirectories = hashSetOf("src/test/java") override val defaultTestDirectories = hashSetOf("src/test/java")
override val directive = "javaProject" override val directive = "javaProject"

View file

@ -1,10 +1,8 @@
package com.beust.kobalt.app.kotlin package com.beust.kobalt.app.kotlin
import com.beust.kobalt.app.BuildGenerator import com.beust.kobalt.app.BuildGenerator
import com.beust.kobalt.plugin.kotlin.KotlinProjectInfo
import com.google.inject.Inject
public class KotlinBuildGenerator @Inject constructor (val projectInfo: KotlinProjectInfo) : BuildGenerator() { public class KotlinBuildGenerator : BuildGenerator() {
override val defaultSourceDirectories = hashSetOf("src/main/kotlin") override val defaultSourceDirectories = hashSetOf("src/main/kotlin")
override val defaultTestDirectories = hashSetOf("src/test/kotlin") override val defaultTestDirectories = hashSetOf("src/test/kotlin")
override val directive = "kotlinProject" override val directive = "kotlinProject"

View file

@ -1,6 +1,7 @@
package com.beust.kobalt.plugin.java package com.beust.kobalt.plugin.java
import com.beust.kobalt.TaskResult import com.beust.kobalt.TaskResult
import com.beust.kobalt.Variant
import com.beust.kobalt.api.* import com.beust.kobalt.api.*
import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.internal.BaseJvmPlugin import com.beust.kobalt.internal.BaseJvmPlugin
@ -11,7 +12,8 @@ import javax.inject.Singleton
@Singleton @Singleton
class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler) class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler)
: BaseJvmPlugin<JavaConfig>(), IDocContributor, ICompilerContributor, ITestSourceDirectoryContributor { : BaseJvmPlugin<JavaConfig>(), IDocContributor, ICompilerContributor, ITestSourceDirectoryContributor,
IBuildConfigContributor {
companion object { companion object {
const val PLUGIN_NAME = "Java" const val PLUGIN_NAME = "Java"
} }
@ -57,6 +59,17 @@ class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler)
override fun testSourceDirectoriesFor(project: Project, context: KobaltContext) override fun testSourceDirectoriesFor(project: Project, context: KobaltContext)
= project.sourceDirectoriesTest.map { File(it) }.toList() = project.sourceDirectoriesTest.map { File(it) }.toList()
// IBuildConfigContributor
override fun affinity(project: Project): Int {
return if (project.projectExtra.suffixesFound.contains("java")) 1 else 0
}
override fun generateBuildConfig(project: Project, context: KobaltContext, packageName: String,
variant: Variant, buildConfigs: List<BuildConfig>): String {
return JavaProjectInfo().generateBuildConfig(project, context, packageName, variant, buildConfigs)
}
} }
@Directive @Directive

View file

@ -24,8 +24,7 @@ public class JavaProject(
override var dependencies: Dependencies? = null, override var dependencies: Dependencies? = null,
@Directive @Directive
override var packaging: String? = null) override var packaging: String? = null)
: Project(name, version, directory, buildDirectory, group, artifactId, packaging, dependencies, : Project(name, version, directory, buildDirectory, group, artifactId, packaging, dependencies, ".java") {
".java", projectInfo = JavaProjectInfo()) {
override public fun toString() = toString("JavaProject", "name", name) override public fun toString() = toString("JavaProject", "name", name)
} }

View file

@ -1,6 +1,7 @@
package com.beust.kobalt.plugin.kotlin package com.beust.kobalt.plugin.kotlin
import com.beust.kobalt.TaskResult import com.beust.kobalt.TaskResult
import com.beust.kobalt.Variant
import com.beust.kobalt.api.* import com.beust.kobalt.api.*
import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.internal.BaseJvmPlugin import com.beust.kobalt.internal.BaseJvmPlugin
@ -15,7 +16,8 @@ import javax.inject.Singleton
@Singleton @Singleton
class KotlinPlugin @Inject constructor(val executors: KobaltExecutors) class KotlinPlugin @Inject constructor(val executors: KobaltExecutors)
: BaseJvmPlugin<KotlinConfig>(), IDocContributor, IClasspathContributor, ICompilerContributor { : BaseJvmPlugin<KotlinConfig>(), IDocContributor, IClasspathContributor, ICompilerContributor,
IBuildConfigContributor {
companion object { companion object {
const val PLUGIN_NAME = "Kotlin" const val PLUGIN_NAME = "Kotlin"
@ -122,6 +124,15 @@ class KotlinPlugin @Inject constructor(val executors: KobaltExecutors)
log(2, "${project.name}: $s") log(2, "${project.name}: $s")
} }
// IBuildConfigContributor
override fun affinity(project: Project): Int {
return if (project.projectExtra.suffixesFound.contains("kotlin")) 2 else 0
}
override fun generateBuildConfig(project: Project, context: KobaltContext, packageName: String,
variant: Variant, buildConfigs: List<BuildConfig>): String {
return KotlinProjectInfo().generateBuildConfig(project, context, packageName, variant, buildConfigs)
}
} }
/** /**

View file

@ -24,8 +24,7 @@ public class KotlinProject(
override var dependencies: Dependencies? = null, override var dependencies: Dependencies? = null,
@Directive @Directive
override var packaging: String? = null) override var packaging: String? = null)
: Project(name, version, directory, buildDirectory, group, artifactId, packaging, dependencies, ".kt", : Project(name, version, directory, buildDirectory, group, artifactId, packaging, dependencies, ".kt") {
projectInfo = KotlinProjectInfo()) {
override public fun toString() = toString("KotlinProject", "name", name) override public fun toString() = toString("KotlinProject", "name", name)
} }