Refactoring: simplify KotlinSourceSet creation

This commit is contained in:
Alexey Tsvetkov
2016-07-27 22:32:32 +03:00
parent cc585cf6f3
commit 5f4e56c251
@@ -14,7 +14,6 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.initialization.dsl.ScriptHandler import org.gradle.api.initialization.dsl.ScriptHandler
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging import org.gradle.api.logging.Logging
@@ -60,16 +59,11 @@ abstract class KotlinSourceSetProcessor<T : AbstractCompile>(
protected val sourceSetName: String = sourceSet.name protected val sourceSetName: String = sourceSet.name
protected val sourceRootDir: String = "src/${sourceSetName}/kotlin" protected val sourceRootDir: String = "src/${sourceSetName}/kotlin"
protected val absoluteSourceRootDir: String = project.projectDir.path + "/" + sourceRootDir protected val absoluteSourceRootDir: String = project.projectDir.path + "/" + sourceRootDir
protected val kotlinSourceSet: KotlinSourceSet? = createKotlinSourceSet() protected val kotlinSourceSet: KotlinSourceSet = createKotlinSourceSet()
protected val kotlinDirSet: SourceDirectorySet? = createKotlinDirSet()
protected val kotlinTask: T = createKotlinCompileTask() protected val kotlinTask: T = createKotlinCompileTask()
protected val kotlinTaskName: String by lazy { kotlinTask.name }
protected abstract val defaultKotlinDestinationDir: File protected abstract val defaultKotlinDestinationDir: File
public fun run() { fun run() {
if (kotlinSourceSet == null || kotlinDirSet == null) {
return
}
addKotlinDirSetToSources() addKotlinDirSetToSources()
doTargetSpecificProcessing() doTargetSpecificProcessing()
} }
@@ -82,23 +76,15 @@ abstract class KotlinSourceSetProcessor<T : AbstractCompile>(
return kotlinSourceSet return kotlinSourceSet
} }
private fun createKotlinDirSet(): SourceDirectorySet? {
val srcDir = project.file(sourceRootDir)
logger.kotlinDebug("Creating Kotlin SourceDirectorySet for source set $kotlinSourceSet with src dir $srcDir")
val kotlinDirSet = kotlinSourceSet?.kotlin
kotlinDirSet?.srcDir(srcDir)
return kotlinDirSet
}
private fun addKotlinDirSetToSources() { private fun addKotlinDirSetToSources() {
logger.kotlinDebug("Adding Kotlin SourceDirectorySet $kotlinDirSet to source set $sourceSet") val kotlinDirSet = kotlinSourceSet.kotlin
sourceSet.allJava?.source(kotlinDirSet) sourceSet.allJava.source(kotlinDirSet)
sourceSet.allSource?.source(kotlinDirSet) sourceSet.allSource.source(kotlinDirSet)
sourceSet.resources?.filter?.exclude { kotlinDirSet!!.contains(it.file) } sourceSet.resources.filter.exclude { it.file in kotlinDirSet }
} }
private fun createKotlinCompileTask(suffix: String = ""): T { private fun createKotlinCompileTask(): T {
val name = sourceSet.getCompileTaskName(compileTaskNameSuffix) + suffix val name = sourceSet.getCompileTaskName(compileTaskNameSuffix)
logger.kotlinDebug("Creating kotlin compile task $name") logger.kotlinDebug("Creating kotlin compile task $name")
val kotlinCompile = doCreateTask(project, name) val kotlinCompile = doCreateTask(project, name)
kotlinCompile.description = taskDescription kotlinCompile.description = taskDescription
@@ -166,11 +152,11 @@ class Kotlin2JvmSourceSetProcessor(
kotlinAfterJavaTask = project.initKapt(kotlinTask, javaTask, kaptManager, sourceSetName, null, subpluginEnvironment, tasksProvider) kotlinAfterJavaTask = project.initKapt(kotlinTask, javaTask, kaptManager, sourceSetName, null, subpluginEnvironment, tasksProvider)
} }
sourceSet.java.srcDirs.forEach { kotlinDirSet?.srcDir(it) } sourceSet.java.srcDirs.forEach { kotlinSourceSet.kotlin.srcDir(it) }
// KotlinCompile.source(kotlinDirSet) should be called only after all java roots are added to kotlinDirSet // KotlinCompile.source(kotlinDirSet) should be called only after all java roots are added to kotlinDirSet
// otherwise some java roots can be ignored // otherwise some java roots can be ignored
kotlinTask.source(kotlinDirSet) kotlinTask.source(kotlinSourceSet.kotlin)
kotlinAfterJavaTask?.let { it.source(kotlinDirSet) } kotlinAfterJavaTask?.let { it.source(kotlinSourceSet.kotlin) }
configureJavaTask(kotlinTask, javaTask, kotlinAfterJavaTask, logger) configureJavaTask(kotlinTask, javaTask, kotlinAfterJavaTask, logger)
createSyncOutputTask(project, kotlinTask, javaTask, kotlinAfterJavaTask, sourceSetName) createSyncOutputTask(project, kotlinTask, javaTask, kotlinAfterJavaTask, sourceSetName)
} }
@@ -212,10 +198,10 @@ class Kotlin2JsSourceSetProcessor(
tasksProvider.createKotlinJSTask(project, taskName) tasksProvider.createKotlinJSTask(project, taskName)
override fun doTargetSpecificProcessing() { override fun doTargetSpecificProcessing() {
build?.dependsOn(kotlinTaskName) val taskName = kotlinTask.name
clean?.dependsOn("clean" + kotlinTaskName.capitalize()) build?.dependsOn(taskName)
kotlinTask.source(kotlinDirSet) clean?.dependsOn("clean" + taskName.capitalize())
kotlinTask.source(kotlinSourceSet.kotlin)
createCleanSourceMapTask() createCleanSourceMapTask()
} }