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

Kotlin compiler should run first.

This commit is contained in:
Cedric Beust 2016-04-09 11:28:50 -07:00
parent c23693a4f2
commit 7bea179d69
3 changed files with 36 additions and 24 deletions

View file

@ -2,7 +2,7 @@ package com.beust.kobalt.api
import com.beust.kobalt.TaskResult import com.beust.kobalt.TaskResult
interface ICompiler { interface ICompiler : Comparable<ICompiler> {
/** /**
* The suffixes handled by this compiler (without the dot, e.g. "java" or "kt"). * The suffixes handled by this compiler (without the dot, e.g. "java" or "kt").
*/ */
@ -17,6 +17,17 @@ interface ICompiler {
* Run the compilation based on the info. * Run the compilation based on the info.
*/ */
fun compile(project: Project, context: KobaltContext, info: CompilerActionInfo) : TaskResult fun compile(project: Project, context: KobaltContext, info: CompilerActionInfo) : TaskResult
companion object {
val DEFAULT_PRIORITY: Int = 5
}
/**
* The priority of this compiler. Lower priority compilers are run first.
*/
val priority: Int get() = DEFAULT_PRIORITY
override fun compareTo(other: ICompiler) = priority.compareTo(other.priority)
} }
interface ICompilerContributor : IProjectAffinity { interface ICompilerContributor : IProjectAffinity {

View file

@ -194,29 +194,28 @@ open class JvmCompilerPlugin @Inject constructor(
if (compilerContributors.isEmpty()) { if (compilerContributors.isEmpty()) {
throw KobaltException("Couldn't find any compiler for project ${project.name}") throw KobaltException("Couldn't find any compiler for project ${project.name}")
} else { } else {
compilerContributors.forEach { contributor -> val allCompilers = compilerContributors.flatMap { it.compilersFor(project, context)}.sorted()
contributor.compilersFor(project, context).forEach { compiler -> allCompilers.forEach { compiler ->
val contributedSourceDirs = val contributedSourceDirs =
if (isTest) { if (isTest) {
context.testSourceDirectories(project) context.testSourceDirectories(project)
} else {
context.sourceDirectories(project)
}
val sourceFiles = KFiles.findSourceFiles(project.directory,
contributedSourceDirs.map { it.path }, compiler.sourceSuffixes)
if (sourceFiles.size > 0) {
// TODO: createCompilerActionInfo recalculates the source files, only compute them
// once and pass them
val info = createCompilerActionInfo(project, context, isTest, sourceDirectories,
sourceSuffixes = compiler.sourceSuffixes)
val thisResult = compiler.compile(project, context, info)
results.add(thisResult)
if (!thisResult.success && failedResult == null) {
failedResult = thisResult
}
} else { } else {
log(2, "Compiler $compiler not running on ${project.name} since no source files were found") context.sourceDirectories(project)
} }
val sourceFiles = KFiles.findSourceFiles(project.directory,
contributedSourceDirs.map { it.path }, compiler.sourceSuffixes)
if (sourceFiles.size > 0) {
// TODO: createCompilerActionInfo recalculates the source files, only compute them
// once and pass them
val info = createCompilerActionInfo(project, context, isTest, sourceDirectories,
sourceSuffixes = compiler.sourceSuffixes)
val thisResult = compiler.compile(project, context, info)
results.add(thisResult)
if (!thisResult.success && failedResult == null) {
failedResult = thisResult
}
} else {
log(2, "Compiler $compiler not running on ${project.name} since no source files were found")
} }
} }
return if (failedResult != null) failedResult!! return if (failedResult != null) failedResult!!

View file

@ -19,8 +19,7 @@ import javax.inject.Singleton
@Singleton @Singleton
class KotlinPlugin @Inject constructor(val executors: KobaltExecutors, val dependencyManager: DependencyManager, class KotlinPlugin @Inject constructor(val executors: KobaltExecutors, val dependencyManager: DependencyManager,
override val configActor: ConfigActor<KotlinConfig>) override val configActor: ConfigActor<KotlinConfig>)
: BaseJvmPlugin<KotlinConfig>(configActor), IDocContributor, IClasspathContributor, ICompilerContributor, : BaseJvmPlugin<KotlinConfig>(configActor), IDocContributor, IClasspathContributor, ICompilerContributor, IBuildConfigContributor {
IBuildConfigContributor {
companion object { companion object {
const val PLUGIN_NAME = "Kotlin" const val PLUGIN_NAME = "Kotlin"
@ -116,6 +115,9 @@ class KotlinPlugin @Inject constructor(val executors: KobaltExecutors, val depen
val compiler = object: ICompiler { val compiler = object: ICompiler {
override val sourceSuffixes = listOf("kt") override val sourceSuffixes = listOf("kt")
/** The Kotlin compiler should run before the Java one */
override val priority: Int get() = ICompiler.DEFAULT_PRIORITY - 1
override val sourceDirectory = "kotlin" override val sourceDirectory = "kotlin"
override fun compile(project: Project, context: KobaltContext, info: CompilerActionInfo): TaskResult { override fun compile(project: Project, context: KobaltContext, info: CompilerActionInfo): TaskResult {