From 048982cf36f5edeb0cfc7d3e11d4ffadf404a649 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 26 Jul 2016 19:21:04 +0300 Subject: [PATCH] Refactor classpath handling in KotlinCompile #KT-13234 fixed --- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 1405fd6e932..288e55e17aa 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.gradle.tasks import org.apache.commons.io.FilenameUtils -import org.apache.commons.lang.StringUtils import org.codehaus.groovy.runtime.MethodClosure import org.gradle.api.GradleException import org.gradle.api.file.SourceDirectorySet @@ -155,22 +154,22 @@ open class KotlinCompile() : AbstractKotlinCompile() { } private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null + private val additionalClasspath = arrayListOf() + private val compileClasspath: Iterable + get() = (classpath + additionalClasspath) + .filterTo(LinkedHashSet()) { it.exists() } + val kaptOptions = KaptOptions() val pluginOptions = CompilerPluginOptions() override fun populateTargetSpecificArgs(args: K2JVMCompilerArguments) { - // show kotlin compiler where to look for java source files -// args.freeArgs = (args.freeArgs + getJavaSourceRoots().map { it.getAbsolutePath() }).toSet().toList() logger.kotlinDebug("args.freeArgs = ${args.freeArgs}") - if (StringUtils.isEmpty(kotlinOptions.classpath)) { - args.classpath = classpath.filter({ it != null && it.exists() }).joinToString(File.pathSeparator) - logger.kotlinDebug("args.classpath = ${args.classpath}") + if (kotlinOptions.classpath?.isNotBlank() ?: false) { + logger.warn("kotlinOptions.classpath will be ignored") } - - if (args.destination?.isNotBlank() ?: false) { - // TODO: fix if needed - logger.warn("Setting kotlinOptions.destination is not supported in gradle") + if (kotlinOptions.destination?.isNotBlank() ?: false) { + logger.warn("kotlinOptions.destination will be ignored") } logger.kotlinDebug("destinationDir = $destinationDir") @@ -281,12 +280,8 @@ open class KotlinCompile() : AbstractKotlinCompile() { return modifiedKotlinFiles } - fun isClassPathChanged(): Boolean { - // TODO: that doesn't look to wise - join it first and then split here, consider storing it somewhere in between - val classpath = args.classpath.split(File.pathSeparator).map { File(it) }.toHashSet() - val changedClasspath = modified.filter { classpath.contains(it) } - return changedClasspath.any() - } + fun isClassPathChanged(): Boolean = + modified.any { classpath.contains(it) } fun calculateSourcesToCompile(): Pair, Boolean> { if (!incremental @@ -354,8 +349,7 @@ open class KotlinCompile() : AbstractKotlinCompile() { var (sourcesToCompile, isIncrementalDecided) = calculateSourcesToCompile() if (isIncrementalDecided) { - // TODO: process as list here, merge into string later - args.classpath = args.classpath + File.pathSeparator + outputDir.absolutePath + additionalClasspath.add(destinationDir) } else { // there is no point in updating annotation file since all files will be compiled anyway @@ -428,7 +422,13 @@ open class KotlinCompile() : AbstractKotlinCompile() { getIncrementalCache: (TargetId)->GradleIncrementalCacheImpl, lookupTracker: LookupTracker ): CompileChangedResults { - val moduleFile = makeModuleFile(args.moduleName, isTest = false, outputDir = outputDir, sourcesToCompile = sourcesToCompile, javaSourceRoots = getJavaSourceRoots(), classpath = classpath, friendDirs = listOf()) + val moduleFile = makeModuleFile(args.moduleName, + isTest = false, + outputDir = outputDir, + sourcesToCompile = sourcesToCompile, + javaSourceRoots = getJavaSourceRoots(), + classpath = compileClasspath, + friendDirs = listOf()) args.module = moduleFile.absolutePath val outputItemCollector = OutputItemsCollectorImpl() val messageCollector = GradleMessageCollector(logger, outputItemCollector) @@ -465,7 +465,14 @@ open class KotlinCompile() : AbstractKotlinCompile() { // todo: can be optimized -- compile and remove only files that were not generated listClassFiles(outputDir.canonicalPath).forEach { it.delete() } - val moduleFile = makeModuleFile(args.moduleName, isTest = false, outputDir = outputDir, sourcesToCompile = sourcesToCompile, javaSourceRoots = getJavaSourceRoots(), classpath = classpath, friendDirs = listOf()) + val moduleFile = makeModuleFile( + args.moduleName, + isTest = false, + outputDir = outputDir, + sourcesToCompile = sourcesToCompile, + javaSourceRoots = getJavaSourceRoots(), + classpath = compileClasspath, + friendDirs = listOf()) args.module = moduleFile.absolutePath val messageCollector = GradleMessageCollector(logger)