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 3b57d68c..12a2c01b 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 @@ -36,8 +36,9 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, fun resDirectories(project: Project) : List = sourceDirectories(project, "res") - fun sourceDirectories(project: Project) : List = - sourceDirectories(project, project.projectInfo.sourceDirectory) + fun sourceDirectories(project: Project) = project.projectInfo.sourceSuffixes.flatMap { + sourceDirectories(project, it) + } /** * suffix is either "java" (to find source files) or "res" (to find resources) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ProjectInfo.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ProjectInfo.kt index 300be5a2..81971559 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ProjectInfo.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/ProjectInfo.kt @@ -7,12 +7,15 @@ import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project import java.util.* +class LanguageInfo(val name: String, val suffix : String = name) + /** * Data that is useful for projects to have but should not be specified in the DSL. */ interface IProjectInfo { - /** Used to determine the last directory segment of the flavored sources, e.g. src/main/JAVA */ - val sourceDirectory : String + val languageInfos: List + + val sourceSuffixes: List val defaultSourceDirectories: HashSet val defaultTestDirectories: HashSet @@ -37,9 +40,11 @@ interface IProjectInfo { fun dependsOnDirtyProjects(project: Project) = project.projectInfo.dependsOn.any { it.projectInfo.isDirty } } -abstract class BaseProjectInfo : IProjectInfo { +abstract class BaseProjectInfo(override val languageInfos: List) : IProjectInfo { abstract fun generate(field: BuildConfigField) : String + override val sourceSuffixes = languageInfos.map { it.suffix } + fun generate(type: String, name: String, value: Any) = generate(BuildConfigField(type, name, value)) fun generateFieldsFromContributors(project: Project, context: KobaltContext) 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 f3a21975..2b3b1aa1 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt @@ -37,7 +37,7 @@ class JavaPlugin @Inject constructor( // IDocContributor override fun affinity(project: Project, context: KobaltContext) = - if (project.sourceSuffix == ".java") 1 else 0 + if (project.sourceDirectories.any { it.contains("java") }) 1 else 0 override fun generateDoc(project: Project, context: KobaltContext, info: CompilerActionInfo) : TaskResult { val result = 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 6084e94d..11f55760 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProjectInfo.kt @@ -6,11 +6,11 @@ import com.beust.kobalt.api.BuildConfigField import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project import com.beust.kobalt.internal.BaseProjectInfo +import com.beust.kobalt.internal.LanguageInfo import com.google.inject.Singleton @Singleton -class JavaProjectInfo : BaseProjectInfo() { - override val sourceDirectory = "java" +class JavaProjectInfo : BaseProjectInfo(listOf(LanguageInfo("java", "java"))) { override val defaultSourceDirectories = hashSetOf("src/main/java", "src/main/resources", "src/main/res") override val defaultTestDirectories = hashSetOf("src/test/java", "src/test/resources", "src/test/res") 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 2dee776e..6158236c 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -125,7 +125,7 @@ class KotlinPlugin @Inject constructor( // ICompilerContributor override fun affinity(project: Project, context: KobaltContext) = - if (project.sourceSuffix == ".kt") 1 else 0 + if (project.sourceDirectories.any { it.contains("kotlin") }) 2 else 0 override fun compile(project: Project, context: KobaltContext, info: CompilerActionInfo) : TaskResult { val result = diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProjectInfo.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProjectInfo.kt index ebdf70e1..9d951583 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProjectInfo.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProjectInfo.kt @@ -6,11 +6,11 @@ import com.beust.kobalt.api.BuildConfigField import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project import com.beust.kobalt.internal.BaseProjectInfo +import com.beust.kobalt.internal.LanguageInfo import com.google.inject.Singleton @Singleton -class KotlinProjectInfo : BaseProjectInfo() { - override val sourceDirectory = "kotlin" +class KotlinProjectInfo : BaseProjectInfo(listOf(LanguageInfo("kotlin", "kt"))) { override val defaultSourceDirectories = hashSetOf("src/main/kotlin", "src/main/resources", "src/main/res") override val defaultTestDirectories = hashSetOf("src/test/kotlin", "src/test/resources", "src/test/res")