Refactoring: simplify KotlinSourceSet creation
This commit is contained in:
+15
-29
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user