From 9d340e1b8317957dff176bb6b57fc2146fc59634 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 5 Aug 2016 22:45:32 +0300 Subject: [PATCH] Kapt: Filter out kapt2 sources in KotlinCompile task (cherry picked from commit b248b20) --- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 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 fa39f39818a..d8978b69ff1 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 @@ -519,18 +519,36 @@ open class KotlinCompile() : AbstractKotlinCompile() { private fun File.isJavaFile() = extension.equals(JavaFileType.INSTANCE.defaultExtension, ignoreCase = true) + + private fun File.isKapt2GeneratedDirectory(): Boolean { + val kapt2GeneratedSourcesDir = File(project.buildDir, "generated/source/kapt2") + if (!kapt2GeneratedSourcesDir.isDirectory) return false + return FileUtil.isAncestor(kapt2GeneratedSourcesDir, this, /* strict = */ false) + } + + private fun filterOutKapt2Directories(vararg sources: Any?): Array { + return sources.flatMap { source -> + when (source) { + is File -> if (source.isKapt2GeneratedDirectory()) emptyList() else listOf(source) + is SourceDirectorySet -> source.srcDirs.filter { !it.isKapt2GeneratedDirectory() } + else -> emptyList() + } + }.toTypedArray() + } // override setSource to track source directory sets and files (for generated android folders) - override fun setSource(source: Any?) { + override fun setSource(sources: Any?) { sourceRoots.clear() - addSourceRoot(source) - super.setSource(source) + val sourcesToAdd = filterOutKapt2Directories(sources) + addSourceRoots(*sourcesToAdd) + super.setSource(sourcesToAdd.firstOrNull()) } // override source to track source directory sets and files (for generated android folders) override fun source(vararg sources: Any?): SourceTask? { - sources.forEach { addSourceRoot(it) } - return super.source(sources) + val sourcesToAdd = filterOutKapt2Directories(*sources) + addSourceRoots(*sourcesToAdd) + return super.source(*sourcesToAdd) } fun findRootsForSources(sources: Iterable): Set { @@ -548,13 +566,11 @@ open class KotlinCompile() : AbstractKotlinCompile() { return resultRoots } - private fun addSourceRoot(source: Any?) { - when (source) { - is SourceDirectorySet -> { - sourceRoots.addAll(source.srcDirs) - } - is File -> { - sourceRoots.add(source) + private fun addSourceRoots(vararg sources: Any?) { + for (source in sources) { + when (source) { + is SourceDirectorySet -> sourceRoots.addAll(source.srcDirs) + is File -> sourceRoots.add(source) } } }