[Gradle, JS] Register link tasks for binaries, not for compilations

This commit is contained in:
Ilya Goncharov
2020-02-12 16:56:15 +03:00
parent ab218317de
commit eab6a7d038
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@@ -101,18 +102,21 @@ internal abstract class KotlinSourceSetProcessor<T : AbstractKotlinCompile<*>>(
} }
private fun prepareKotlinCompileTask(): TaskProvider<out T> = private fun prepareKotlinCompileTask(): TaskProvider<out T> =
registerKotlinCompileTask().also { task -> registerKotlinCompileTask(register = ::doRegisterTask).also { task ->
kotlinCompilation.output.addClassesDir { project.files(task.map { it.destinationDir }) } kotlinCompilation.output.addClassesDir { project.files(task.map { it.destinationDir }) }
} }
protected fun registerKotlinCompileTask(name: String = kotlinCompilation.compileKotlinTaskName): TaskProvider<out T> { protected fun registerKotlinCompileTask(
name: String = kotlinCompilation.compileKotlinTaskName,
register: (Project, String, (T) -> Unit) -> TaskProvider<out T>
): TaskProvider<out T> {
logger.kotlinDebug("Creating kotlin compile task $name") logger.kotlinDebug("Creating kotlin compile task $name")
KotlinCompileTaskData.register(name, kotlinCompilation).apply { KotlinCompileTaskData.register(name, kotlinCompilation).apply {
destinationDir.set(project.provider { defaultKotlinDestinationDir }) destinationDir.set(project.provider { defaultKotlinDestinationDir })
} }
return doRegisterTask(project, name) { return register(project, name) {
it.description = taskDescription it.description = taskDescription
it.mapClasspath { kotlinCompilation.compileDependencyFiles } it.mapClasspath { kotlinCompilation.compileDependencyFiles }
} }
@@ -321,29 +325,8 @@ internal class KotlinJsIrSourceSetProcessor(
project: Project, project: Project,
taskName: String, taskName: String,
configureAction: (Kotlin2JsCompile) -> (Unit) configureAction: (Kotlin2JsCompile) -> (Unit)
): TaskProvider<out Kotlin2JsCompile> { ): TaskProvider<out Kotlin2JsCompile> =
val compilation = kotlinCompilation as KotlinJsIrCompilation tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction)
if (taskName == compilation.productionLinkTaskName) {
return registerJsLink(
project,
taskName,
BuildVariantKind.PRODUCTION,
configureAction
)
}
if (taskName == compilation.developmentLinkTaskName) {
return registerJsLink(
project,
taskName,
BuildVariantKind.DEVELOPMENT,
configureAction
)
}
return tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction)
}
private fun registerJsLink( private fun registerJsLink(
project: Project, project: Project,
@@ -368,16 +351,11 @@ internal class KotlinJsIrSourceSetProcessor(
val compilation = kotlinCompilation as KotlinJsIrCompilation val compilation = kotlinCompilation as KotlinJsIrCompilation
listOf( (compilation.target as KotlinJsIrTarget).binaries.all { binary ->
compilation.productionLinkTaskName,
compilation.developmentLinkTaskName
).onEach { taskName ->
registerKotlinCompileTask( registerKotlinCompileTask(
taskName binary.linkTaskName
) ) { project, name, action ->
}.forEach { taskName -> registerJsLink(project, name, binary.type, action)
project.tasks.named(taskName).configure {
it.dependsOn(kotlinTask)
} }
} }