diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigActor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigActor.kt new file mode 100644 index 00000000..2417bc39 --- /dev/null +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigActor.kt @@ -0,0 +1,18 @@ +package com.beust.kobalt.api + +import java.util.* + +/** + * Actors that have one config object per project can use this helper class. + */ +interface IConfigActor { + val configurations : HashMap + + fun configurationFor(project: Project?) = if (project != null) configurations[project.name] else null + + fun addConfiguration(project: Project, configuration: T) = configurations.put(project.name, configuration) +} + +open class ConfigActor: IConfigActor { + override val configurations : HashMap = hashMapOf() +} diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigPlugin.kt deleted file mode 100644 index c05e3177..00000000 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigPlugin.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.beust.kobalt.api - -/** - * A plug-in that has some per-project configuration in the build file. - */ -abstract public class ConfigPlugin : BasePlugin() { - private val configurations = hashMapOf() - - fun configurationFor(project: Project?) = if (project != null) configurations[project.name] else null - - fun addConfiguration(project: Project, configuration: T) = configurations.put(project.name, configuration) -} diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsActor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsActor.kt new file mode 100644 index 00000000..5ec4ce53 --- /dev/null +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsActor.kt @@ -0,0 +1,19 @@ +package com.beust.kobalt.api + +import com.google.common.collect.ArrayListMultimap +import com.google.common.collect.ListMultimap + +/** + * Actors that have more than config object per project can use this helper class. + */ +interface IConfigsActor { + val configurations : ListMultimap + + fun configurationFor(project: Project?) = if (project != null) configurations[project.name] else null + + fun addConfiguration(project: Project, configuration: T) = configurations.put(project.name, configuration) +} + +open class ConfigsActor: IConfigsActor { + override val configurations = ArrayListMultimap.create() +} diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsPlugin.kt deleted file mode 100644 index 845f6b24..00000000 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ConfigsPlugin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.beust.kobalt.api - -import com.google.common.collect.ArrayListMultimap - -/** - * A plug-in that has some per-project list of configurations in the build file. - */ -abstract public class ConfigsPlugin : BasePlugin() { - private val configurations = ArrayListMultimap.create() - - fun configurationFor(project: Project) = configurations[project.name] - - fun addConfiguration(project: Project, configuration: T) = configurations.put(project.name, configuration) -} diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt index 89e20af1..44d2fe81 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/BaseJvmPlugin.kt @@ -1,12 +1,17 @@ package com.beust.kobalt.internal -import com.beust.kobalt.api.ConfigPlugin +import com.beust.kobalt.api.BasePlugin +import com.beust.kobalt.api.ConfigActor import com.beust.kobalt.api.ICompilerFlagContributor +import com.beust.kobalt.api.IConfigActor /** * Base class for JVM language plug-ins. */ -abstract class BaseJvmPlugin : ConfigPlugin(), ICompilerFlagContributor { +abstract class BaseJvmPlugin(open val configActor: ConfigActor) : + BasePlugin(), + IConfigActor by configActor, + ICompilerFlagContributor { companion object { // Run before other flag contributors val FLAG_CONTRIBUTOR_PRIORITY = ICompilerFlagContributor.DEFAULT_FLAG_PRIORITY - 10 diff --git a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt index 21647a2d..e8470eed 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt @@ -34,9 +34,10 @@ fun Project.application(init: ApplicationConfig.() -> Unit) { } @Singleton -class ApplicationPlugin @Inject constructor(val executors: KobaltExecutors, +class ApplicationPlugin @Inject constructor(val configActor: ConfigActor, + val executors: KobaltExecutors, val dependencyManager: DependencyManager, val taskContributor : TaskContributor) - : ConfigPlugin(), IRunnerContributor, ITaskContributor { + : BasePlugin(), IRunnerContributor, ITaskContributor, IConfigActor by configActor { companion object { const val PLUGIN_NAME = "Application" diff --git a/src/main/kotlin/com/beust/kobalt/plugin/apt/AptPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/apt/AptPlugin.kt index 26713b27..b0080ec8 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/apt/AptPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/apt/AptPlugin.kt @@ -18,8 +18,8 @@ import javax.inject.Singleton * (outputDir, etc...). */ @Singleton -public class AptPlugin @Inject constructor(val depFactory: DepFactory) -: ConfigPlugin(), ICompilerFlagContributor, ISourceDirectoryContributor { +class AptPlugin @Inject constructor(val depFactory: DepFactory, val configActor: ConfigActor) + : BasePlugin(), ICompilerFlagContributor, ISourceDirectoryContributor, IConfigActor by configActor { // ISourceDirectoryContributor diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt index e7274fa3..fbe065e1 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt @@ -13,9 +13,9 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler) - : BaseJvmPlugin(), IDocContributor, ICompilerContributor, ITestSourceDirectoryContributor, - IBuildConfigContributor { +class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler, override val configActor: ConfigActor) + : BaseJvmPlugin(configActor), IDocContributor, ICompilerContributor, + ITestSourceDirectoryContributor, IBuildConfigContributor { companion object { const val PLUGIN_NAME = "Java" } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt index c400a05c..4433650f 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -17,8 +17,9 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class KotlinPlugin @Inject constructor(val executors: KobaltExecutors) - : BaseJvmPlugin(), IDocContributor, IClasspathContributor, ICompilerContributor, +class KotlinPlugin @Inject constructor(val executors: KobaltExecutors, + override val configActor: ConfigActor) + : BaseJvmPlugin(configActor), IDocContributor, IClasspathContributor, ICompilerContributor, IBuildConfigContributor { companion object { diff --git a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt index f2a4c2e9..4f1c582c 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -24,8 +24,8 @@ import javax.inject.Singleton class PackagingPlugin @Inject constructor(val dependencyManager : DependencyManager, val executors: KobaltExecutors, val jarGenerator: JarGenerator, val warGenerator: WarGenerator, val zipGenerator: ZipGenerator, val taskContributor: TaskContributor, - val pomFactory: PomGenerator.IFactory) - : ConfigPlugin(), ITaskContributor { + val pomFactory: PomGenerator.IFactory, val configActor: ConfigActor) + : BasePlugin(), IConfigActor by configActor, ITaskContributor { companion object { const val PLUGIN_NAME = "Packaging"