diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/CompilerUtils.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/CompilerUtils.kt index 4a2712ab..04e19d86 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/CompilerUtils.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/CompilerUtils.kt @@ -22,7 +22,7 @@ class CompilerUtils @Inject constructor(val files: KFiles, class CompilerResult(val successResults: List, val failedResult: TaskResult?) fun invokeCompiler(project: Project, context: KobaltContext, compiler: ICompilerDescription, - sourceDirectories: List, isTest: Boolean): CompilerResult { + sourceDirectories: List, isTest: Boolean, buildDirectory: File): CompilerResult { val results = arrayListOf() var failedResult: TaskResult? = null val contributedSourceDirs = @@ -37,7 +37,7 @@ class CompilerUtils @Inject constructor(val files: KFiles, // TODO: createCompilerActionInfo recalculates the source files, only compute them // once and pass them val info = createCompilerActionInfo(project, context, compiler, isTest, - sourceDirectories, sourceSuffixes = compiler.sourceSuffixes) + sourceDirectories, sourceSuffixes = compiler.sourceSuffixes, buildDirectory = buildDirectory) val thisResult = invokeCompiler(project, context, compiler, info) results.addAll(thisResult.successResults) if (failedResult == null) { @@ -68,7 +68,8 @@ class CompilerUtils @Inject constructor(val files: KFiles, * Runs all the contributors and interceptors relevant to that task. */ fun createCompilerActionInfo(project: Project, context: KobaltContext, compiler: ICompilerDescription, - isTest: Boolean, sourceDirectories: List, sourceSuffixes: List): CompilerActionInfo { + isTest: Boolean, sourceDirectories: List, sourceSuffixes: List, buildDirectory: File) + : CompilerActionInfo { copyResources(project, context, SourceSet.of(isTest)) val fullClasspath = dependencyManager2.resolve(project, context, isTest, listOf(Scope.COMPILE, Scope.TEST)) @@ -83,11 +84,6 @@ class CompilerUtils @Inject constructor(val files: KFiles, // val d2 = dependencyManager2.resolve(project, context, isTest, listOf(Scope.COMPILE, Scope.TEST)) // } - // The directory where the classes get compiled - val buildDirectory = - if (isTest) File(project.buildDirectory, KFiles.TEST_CLASSES_DIR) - else File(project.classesDir(context)) - File(project.directory, buildDirectory.path).mkdirs() // Remove all the excluded dependencies from the classpath diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 455a2785..d7d7bde5 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -177,9 +177,14 @@ open class JvmCompilerPlugin @Inject constructor( val hasKapt = project.projectProperties.get("kaptConfig") != null val allCompilersSorted = if (hasKapt) swapJavaAndKotlin(allCompilers) else allCompilers var done = false + // The directory where the classes get compiled + val buildDirectory = + if (isTest) File(project.buildDirectory, KFiles.TEST_CLASSES_DIR) + else File(project.classesDir(context)) + allCompilersSorted.doWhile({ ! done }) { compiler -> val compilerResults = compilerUtils.invokeCompiler(project, context, compiler, - sourceDirectories(project, context, isTest), isTest) + sourceDirectories(project, context, isTest), isTest, buildDirectory) results.addAll(compilerResults.successResults) if (failedResult == null) failedResult = compilerResults.failedResult compilerResults.failedResult?.let { failedResult -> @@ -216,6 +221,7 @@ open class JvmCompilerPlugin @Inject constructor( fun taskJavadoc(project: Project): TaskResult { val docGenerator = ActorUtils.selectAffinityActor(project, context, context.pluginInfo.docContributors) if (docGenerator != null) { + val buildDirectory = File(project.buildDirectory, KFiles.JAVADOC_DIR) val contributors = ActorUtils.selectAffinityActors(project, context, context.pluginInfo.compilerContributors) var result: TaskResult? = null @@ -224,7 +230,7 @@ open class JvmCompilerPlugin @Inject constructor( result = docGenerator.generateDoc(project, context, compilerUtils.createCompilerActionInfo(project, context, compiler, isTest = false, sourceDirectories = sourceDirectories(project, context, false), - sourceSuffixes = compiler.sourceSuffixes)) + sourceSuffixes = compiler.sourceSuffixes, buildDirectory = buildDirectory)) } } return result!! diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt index eaf9b01c..ebde2f37 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt @@ -71,6 +71,7 @@ class KFiles { private val SRC = "src" val TEST_CLASSES_DIR : String = "test-classes" + val JAVADOC_DIR: String = "docs/javadoc" val NATIVES_DIR : String = "native" 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 3e7527bd..75dab445 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt @@ -44,11 +44,12 @@ class KotlinCompiler @Inject constructor( } val cp = compilerFirst(info.dependencies.map { it.jarFile.get() }) val infoDir = info.directory - val outputDir = if (infoDir != null) { - KFiles.joinDir(infoDir, info.outputDir.path) - } else { - info.outputDir.path - } + val outputDir = + if (infoDir != null) { + KFiles.joinDir(infoDir, info.outputDir.path) + } else { + info.outputDir.path + } // kotlinc can accept a jar file as -d (which is super convenient) so only // create a directory if the output is not a jar file if (! outputDir.endsWith(".jar")) {