From 33992bdc861349b34633ca0c1eaa618b2b7df4d0 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 26 Feb 2020 18:28:02 +0300 Subject: [PATCH] [Gradle, JS] Extract common interface for JsBinary --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 19 ++++++++------ .../kotlin/gradle/targets/js/ir/JsBinaries.kt | 14 ++++++++--- .../targets/js/ir/KotlinJsBinaryContainer.kt | 25 +++++++++++++++---- .../targets/js/ir/KotlinJsIrSubTarget.kt | 10 +++++--- .../gradle/targets/js/ir/KotlinJsIrTarget.kt | 10 +++++--- .../js/ir/KotlinJsIrTargetConfigurator.kt | 10 +++++--- 6 files changed, 59 insertions(+), 29 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index de2dcac7244..f55739f797b 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.gradle.model.builder.KotlinModelBuilder import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryType +import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget @@ -352,16 +353,18 @@ internal class KotlinJsIrSourceSetProcessor( val compilation = kotlinCompilation as KotlinJsIrCompilation - compilation.binaries.all { binary -> - registerKotlinCompileTask( - binary.linkTaskName - ) { project, name, action -> - registerJsLink(project, name, binary.type) { compileTask -> - action(compileTask) - compileTask.dependsOn(kotlinTask) + compilation.binaries + .withType(JsBinary::class.java) + .all { binary -> + registerKotlinCompileTask( + binary.linkTaskName + ) { project, name, action -> + registerJsLink(project, name, binary.type) { compileTask -> + action(compileTask) + compileTask.dependsOn(kotlinTask) + } } } - } // outputFile can be set later during the configuration phase, get it only after the phase: project.runOnceAfterEvaluated("KotlinJsIrSourceSetProcessor.doTargetSpecificProcessing", kotlinTask) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt index f4d9f34da35..c66c47c4d8f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaries.kt @@ -13,11 +13,17 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryType import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +interface JsBinary2 { + val compilation: KotlinJsCompilation + val name: String + val type: KotlinJsBinaryType +} + sealed class JsBinary( - internal val compilation: KotlinJsCompilation, - internal val name: String, - internal val type: KotlinJsBinaryType -) { + override val compilation: KotlinJsCompilation, + override val name: String, + override val type: KotlinJsBinaryType +) : JsBinary2 { val linkTaskName: String = linkTaskName() val linkTask: TaskProvider diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index af2d2375aeb..05688ec68ff 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -24,8 +24,8 @@ open class KotlinJsBinaryContainer @Inject constructor( val target: KotlinTargetWithBinaries, - backingContainer: DomainObjectSet -) : DomainObjectSet by backingContainer { + backingContainer: DomainObjectSet +) : DomainObjectSet by backingContainer { val project: Project get() = target.project @@ -45,6 +45,8 @@ constructor( target.whenNodejsConfigured { (this as KotlinJsIrSubTarget).produceExecutable() } + + compilation.binaries.executableInternal(compilation) } if (target is KotlinJsTarget) { @@ -58,9 +60,9 @@ constructor( target.whenNodejsConfigured { (this as KotlinJsSubTarget).produceExecutable() } - } - compilation.binaries.executableInternal(compilation) + compilation.binaries.executableLegacyInternal(compilation) + } } internal fun executableInternal(compilation: KotlinJsCompilation) = createBinaries( @@ -69,13 +71,26 @@ constructor( create = ::Executable ) + private fun executableLegacyInternal(compilation: KotlinJsCompilation) = createBinaries( + compilation = compilation, + jsBinaryType = JsBinaryType.EXECUTABLE, + create = { compilation, name, type -> + object : JsBinary2 { + override val compilation: KotlinJsCompilation = compilation + override val name: String = name + override val type: KotlinJsBinaryType = type + } + } + ) + internal fun getBinary( type: KotlinJsBinaryType ): JsBinary = matching { it.type == type } + .withType(JsBinary::class.java) .single() - private fun createBinaries( + private fun createBinaries( compilation: KotlinJsCompilation, types: Collection = listOf(PRODUCTION, DEVELOPMENT), jsBinaryType: JsBinaryType, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 38c140baf9b..b972f2a2542 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -43,11 +43,13 @@ abstract class KotlinJsIrSubTarget( target.compilations.all { val npmProject = it.npmProject - it.binaries.all { binary -> - binary.linkTask.configure { - it.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath + it.binaries + .withType(JsBinary::class.java) + .all { binary -> + binary.linkTask.configure { + it.kotlinOptions.outputFile = npmProject.dir.resolve(npmProject.main).canonicalPath + } } - } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index 03f101b654e..2b8b45f92ca 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -117,11 +117,13 @@ constructor( compilations.all { it.compileKotlinTask.configureCommonJsOptions() - binaries.forEach { - it.linkTask.configure { linkTask -> - linkTask.configureCommonJsOptions() + binaries + .filterIsInstance() + .forEach { + it.linkTask.configure { linkTask -> + linkTask.configureCommonJsOptions() + } } - } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt index 4ccb2201885..d435c3e617c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt @@ -73,11 +73,13 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) : ) } - it.binaries.forEach { - it.linkTask.configure { linkTask -> - linkTask.kotlinOptions.configureOptions() + it.binaries + .filterIsInstance() + .forEach { + it.linkTask.configure { linkTask -> + linkTask.kotlinOptions.configureOptions() + } } - } } }