Kapt: Filter out kapt2 sources in KotlinCompile task

(cherry picked from commit b248b20)
This commit is contained in:
Yan Zhulanow
2016-08-05 22:45:32 +03:00
committed by Yan Zhulanow
parent 04db25a190
commit 9d340e1b83
@@ -520,17 +520,35 @@ open class KotlinCompile() : AbstractKotlinCompile<K2JVMCompilerArguments>() {
private fun File.isJavaFile() = private fun File.isJavaFile() =
extension.equals(JavaFileType.INSTANCE.defaultExtension, ignoreCase = true) 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<Any> {
return sources.flatMap { source ->
when (source) {
is File -> if (source.isKapt2GeneratedDirectory()) emptyList<File>() else listOf(source)
is SourceDirectorySet -> source.srcDirs.filter { !it.isKapt2GeneratedDirectory() }
else -> emptyList<File>()
}
}.toTypedArray()
}
// override setSource to track source directory sets and files (for generated android folders) // 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() sourceRoots.clear()
addSourceRoot(source) val sourcesToAdd = filterOutKapt2Directories(sources)
super.setSource(source) addSourceRoots(*sourcesToAdd)
super.setSource(sourcesToAdd.firstOrNull())
} }
// override source to track source directory sets and files (for generated android folders) // override source to track source directory sets and files (for generated android folders)
override fun source(vararg sources: Any?): SourceTask? { override fun source(vararg sources: Any?): SourceTask? {
sources.forEach { addSourceRoot(it) } val sourcesToAdd = filterOutKapt2Directories(*sources)
return super.source(sources) addSourceRoots(*sourcesToAdd)
return super.source(*sourcesToAdd)
} }
fun findRootsForSources(sources: Iterable<File>): Set<File> { fun findRootsForSources(sources: Iterable<File>): Set<File> {
@@ -548,13 +566,11 @@ open class KotlinCompile() : AbstractKotlinCompile<K2JVMCompilerArguments>() {
return resultRoots return resultRoots
} }
private fun addSourceRoot(source: Any?) { private fun addSourceRoots(vararg sources: Any?) {
when (source) { for (source in sources) {
is SourceDirectorySet -> { when (source) {
sourceRoots.addAll(source.srcDirs) is SourceDirectorySet -> sourceRoots.addAll(source.srcDirs)
} is File -> sourceRoots.add(source)
is File -> {
sourceRoots.add(source)
} }
} }
} }