diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ICompilerFlagContributor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ICompilerFlagContributor.kt index 13396d0e..8e82cbfe 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ICompilerFlagContributor.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/ICompilerFlagContributor.kt @@ -5,4 +5,10 @@ package com.beust.kobalt.api */ interface ICompilerFlagContributor : IContributor { fun flagsFor(project: Project, context: KobaltContext, currentFlags: List): List + val flagPriority: Int + get() = DEFAULT_FLAG_PRIORITY + + companion object { + val DEFAULT_FLAG_PRIORITY = 20 + } } 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 7a32a6ff..0253125d 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 @@ -2,8 +2,20 @@ package com.beust.kobalt.internal import com.beust.kobalt.api.ConfigPlugin import com.beust.kobalt.api.ICompilerFlagContributor +import com.beust.kobalt.api.Project /** * Base class for JVM language plug-ins. */ -abstract class BaseJvmPlugin: ConfigPlugin(), ICompilerFlagContributor \ No newline at end of file +abstract class BaseJvmPlugin : ConfigPlugin(), ICompilerFlagContributor { + companion object { + // Run before other flag contributors + val FLAG_CONTRIBUTOR_PRIORITY = ICompilerFlagContributor.DEFAULT_FLAG_PRIORITY - 10 + } + + protected fun maybeCompilerArgs(project: Project, args: List) + = if (accept(project)) args else emptyList() + + override val flagPriority = FLAG_CONTRIBUTOR_PRIORITY + +} \ No newline at end of file diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompiler.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompiler.kt index 89b4abab..1c15c048 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompiler.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompiler.kt @@ -29,10 +29,14 @@ class JvmCompiler @Inject constructor(val dependencyManager: DependencyManager) .distinct() // Plugins that add flags to the compiler - val contributorFlags = if (project != null) { - context.pluginInfo.compilerFlagContributors.flatMap { - it.flagsFor(project, context, info.compilerArgs) + val currentFlags = arrayListOf().apply { addAll(info.compilerArgs) } + val contributorFlags : List = if (project != null) { + val contributors = context.pluginInfo.compilerFlagContributors + contributors.sortBy { it.flagPriority } + context.pluginInfo.compilerFlagContributors.forEach { + currentFlags.addAll(it.flagsFor(project, context, currentFlags)) } + currentFlags } else { emptyList() } 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 f7f87c95..f1cb528d 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt @@ -38,9 +38,10 @@ class JavaPlugin @Inject constructor(val javaCompiler: JavaCompiler) return result } + // ICompilerFlagsContributor // ICompilerFlagsContributor override fun flagsFor(project: Project, context: KobaltContext, currentFlags: List) - = configurationFor(project)?.compilerArgs ?: listOf() + = maybeCompilerArgs(project, configurationFor(project)?.compilerArgs ?: listOf()) // ICompilerContributor override val sourceSuffixes = listOf("java") diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt index 5d12f50b..75a41e22 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt @@ -152,7 +152,7 @@ class KConfiguration @Inject constructor(val compiler: KotlinCompiler){ fun compilerArgs(s: List) = args.addAll(s) fun compile(project: Project? = null, context: KobaltContext? = null) : TaskResult { - return compiler.compile(project, context, dependencies, classpath, source, output, args + "-no-stdlib") + return compiler.compile(project, context, dependencies, classpath, source, output, args) } } 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 65cfdf15..6c9a278b 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -38,7 +38,8 @@ class KotlinPlugin @Inject constructor(val executors: KobaltExecutors) // ICompilerFlagsContributor override fun flagsFor(project: Project, context: KobaltContext, currentFlags: List) - = configurationFor(project)?.compilerArgs ?: listOf() + = maybeCompilerArgs(project, (configurationFor(project)?.compilerArgs ?: listOf()) + + listOf("-no-stdlib")) // override fun generateDoc(project: Project, context: KobaltContext, info: CompilerActionInfo) : TaskResult { // val configs = dokkaConfigurations[project.name]