From 2b4f9302dceaf1401d0f0fc0f587585c197e3a5b Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 17 Feb 2020 12:05:18 +0300 Subject: [PATCH] [Gradle, JS] Fix naming for webpack tasks - while webpack is actual only for executable it is not necessary to add executable part --- .../kotlin/gradle/targets/js/ir/JsBinaries.kt | 31 ++-- .../gradle/targets/js/ir/JsBinaryTypes.kt | 3 +- .../gradle/targets/js/ir/KotlinBrowserJsIr.kt | 138 +++++++++--------- .../targets/js/ir/KotlinJsBinaryContainer.kt | 15 +- 4 files changed, 98 insertions(+), 89 deletions(-) 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 3eaed798e89..043e3df595e 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 @@ -8,11 +8,13 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.Project import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName sealed class JsBinary( - internal val target: KotlinTarget, + internal val compilation: KotlinJsCompilation, internal val name: String, internal val type: BuildVariantKind ) { @@ -26,32 +28,31 @@ sealed class JsBinary( private fun linkTaskName(): String = lowerCamelCaseName( "compile", - type.name.toLowerCase(), name, "Kotlin", target.targetName ) + val target: KotlinTarget + get() = compilation.target + val project: Project get() = target.project } class Executable( - target: KotlinTarget, + compilation: KotlinJsCompilation, name: String, type: BuildVariantKind ) : JsBinary( - target, + compilation, name, type -) - -class TestExecutable( - target: KotlinTarget, - name: String, - type: BuildVariantKind -) : JsBinary( - target, - name, - type -) \ No newline at end of file +) { + val executeTaskBaseName: String = + generateBinaryName( + compilation, + type, + null + ) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaryTypes.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaryTypes.kt index 0a7993f818c..46d847cf638 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaryTypes.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/JsBinaryTypes.kt @@ -6,6 +6,5 @@ package org.jetbrains.kotlin.gradle.targets.js.ir enum class JsBinaryType { - EXECUTABLE, - TEST + EXECUTABLE } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt index dd580258f1c..06c0470092a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinBrowserJsIr.kt @@ -64,47 +64,51 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : val commonRunTask = project.registerTask(disambiguateCamelCased(RUN_TASK_NAME)) {} - compilation.binaries.all { binary -> - val type = binary.type + compilation.binaries + .matching { it is Executable } + .all { binary -> + binary as Executable - val runTask = project.registerTask( - disambiguateCamelCased( - binary.name, - RUN_TASK_NAME - ) - ) { - it.dependsOn( - nodeJs.npmInstallTask, - binary.linkTask, - target.project.tasks.getByName(compilation.processResourcesTaskName) - ) + val type = binary.type - it.configureOptimization(type) + val runTask = project.registerTask( + disambiguateCamelCased( + binary.executeTaskBaseName, + RUN_TASK_NAME + ) + ) { + it.dependsOn( + nodeJs.npmInstallTask, + binary.linkTask, + target.project.tasks.getByName(compilation.processResourcesTaskName) + ) - it.bin = "webpack-dev-server/bin/webpack-dev-server.js" - it.compilation = compilation - it.entry = binary.linkTask.map { it.outputFile }.get() - it.description = "start ${type.name.toLowerCase()} webpack dev server" + it.configureOptimization(type) - it.devServer = KotlinWebpackConfig.DevServer( - open = true, - contentBase = listOf(compilation.output.resourcesDir.canonicalPath) - ) + it.bin = "webpack-dev-server/bin/webpack-dev-server.js" + it.compilation = compilation + it.entry = binary.linkTask.map { it.outputFile }.get() + it.description = "start ${type.name.toLowerCase()} webpack dev server" - it.outputs.upToDateWhen { false } + it.devServer = KotlinWebpackConfig.DevServer( + open = true, + contentBase = listOf(compilation.output.resourcesDir.canonicalPath) + ) - commonRunConfigurations.forEach { configure -> - it.configure() + it.outputs.upToDateWhen { false } + + commonRunConfigurations.forEach { configure -> + it.configure() + } + } + + if (type == BuildVariantKind.DEVELOPMENT) { + target.runTask.dependsOn(runTask) + commonRunTask.configure { + it.dependsOn(runTask) + } } } - - if (type == BuildVariantKind.DEVELOPMENT) { - target.runTask.dependsOn(runTask) - commonRunTask.configure { - it.dependsOn(runTask) - } - } - } } override fun configureBuild( @@ -132,43 +136,47 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : val assembleTask = project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) assembleTask.dependsOn(distributeResourcesTask) - compilation.binaries.all { binary -> - val type = binary.type - val webpackTask = project.registerTask( - disambiguateCamelCased( - binary.name, - WEBPACK_TASK_NAME - ) - ) { - it.dependsOn( - nodeJs.npmInstallTask, - binary.linkTask, - distributeResourcesTask - ) + compilation.binaries + .matching { it is Executable } + .all { binary -> + binary as Executable - it.configureOptimization(type) + val type = binary.type + val webpackTask = project.registerTask( + disambiguateCamelCased( + binary.executeTaskBaseName, + WEBPACK_TASK_NAME + ) + ) { + it.dependsOn( + nodeJs.npmInstallTask, + binary.linkTask, + distributeResourcesTask + ) - it.compilation = compilation - it.entry = binary.linkTask.map { it.outputFile }.get() - it.description = "build webpack ${type.name.toLowerCase()} bundle" - it.destinationDirectory = distribution.directory + it.configureOptimization(type) - commonWebpackConfigurations.forEach { configure -> - it.configure() + it.compilation = compilation + it.entry = binary.linkTask.map { it.outputFile }.get() + it.description = "build webpack ${type.name.toLowerCase()} bundle" + it.destinationDirectory = distribution.directory + + commonWebpackConfigurations.forEach { configure -> + it.configure() + } + } + + if (type == BuildVariantKind.PRODUCTION) { + assembleTask.dependsOn(webpackTask) + val webpackCommonTask = project.registerTask(disambiguateCamelCased(WEBPACK_TASK_NAME)) { + it.dependsOn(webpackTask) + } + project.registerTask(disambiguateCamelCased(DISTRIBUTION_TASK_NAME)) { + it.dependsOn(webpackCommonTask) + it.dependsOn(distributeResourcesTask) + } } } - - if (type == BuildVariantKind.PRODUCTION) { - assembleTask.dependsOn(webpackTask) - val webpackCommonTask = project.registerTask(disambiguateCamelCased(WEBPACK_TASK_NAME)) { - it.dependsOn(webpackTask) - } - project.registerTask(disambiguateCamelCased(DISTRIBUTION_TASK_NAME)) { - it.dependsOn(webpackCommonTask) - it.dependsOn(distributeResourcesTask) - } - } - } } private fun KotlinWebpack.configureOptimization(kind: BuildVariantKind) { 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 0c338a29132..2e15e799e32 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 @@ -9,7 +9,6 @@ import org.gradle.api.DomainObjectSet import org.gradle.api.Project import org.gradle.api.plugins.ExtensionAware import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind @@ -38,9 +37,11 @@ constructor( compilation: KotlinJsCompilation = defaultCompilation ) { if (compilation !is KotlinJsIrCompilation) { - throw IllegalArgumentException( - "Unable to create executable for $compilation. Use IR compiler (kotlin.js.compiler=true) instead." + project.logger.warn( + "binaries.executable configuration is useless with IR compiler." + + "Use produceExecutable() instead" ) + return } (target as KotlinJsSubTargetContainerDsl).whenBrowserConfigured { @@ -70,7 +71,7 @@ constructor( compilation: KotlinJsCompilation, buildVariantKinds: Collection = listOf(PRODUCTION, DEVELOPMENT), jsBinaryType: JsBinaryType, - create: (target: KotlinTarget, name: String, buildVariantKind: BuildVariantKind) -> T + create: (compilation: KotlinJsCompilation, name: String, buildVariantKind: BuildVariantKind) -> T ) { buildVariantKinds.forEach { buildVariantKind -> val name = generateBinaryName( @@ -83,7 +84,7 @@ constructor( "Cannot create binary $name: binary with such a name already exists" } - val binary = create(target, name, buildVariantKind) + val binary = create(compilation, name, buildVariantKind) add(binary) // Allow accessing binaries as properties of the container in Groovy DSL. if (this is ExtensionAware) { @@ -96,12 +97,12 @@ constructor( internal fun generateBinaryName( compilation: KotlinJsCompilation, buildVariantKind: BuildVariantKind, - jsBinaryType: JsBinaryType + jsBinaryType: JsBinaryType? ) = lowerCamelCaseName( compilation.name.let { if (it == KotlinCompilation.MAIN_COMPILATION_NAME) null else it }, buildVariantKind.name.toLowerCase(), - jsBinaryType.name.toLowerCase() + jsBinaryType?.name?.toLowerCase() ) } }