From b739344b1ced52f13c399909daf2c774360b3720 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 11 May 2022 08:51:22 +0000 Subject: [PATCH] [Gradle, JS] DCE and minimized names could be falsify [Gradle, JS] Add test on falsify compiler flags [Gradle, JS] DCE and minimized names could be falsify Merge-request: KT-MR-6167 Merged-by: Ilya Goncharov ^KT-51957 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 32 +++++++++++++++++++ .../simple-js-executable/build.gradle.kts | 18 +++++++++++ .../simple-js-executable/settings.gradle.kts | 1 + .../src/main/kotlin/Main.kt | 10 ++++++ .../src/main/resources/main.js | 1 + .../gradle/targets/js/ir/KotlinJsIrLink.kt | 7 +++- 6 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/kotlin/Main.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/resources/main.js diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index e101725343f..f8451eeda77 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -219,6 +219,38 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { } } } + + @DisplayName("falsify kotlin js compiler args") + @GradleTest + fun testFalsifyKotlinJsCompilerArgs(gradleVersion: GradleVersion) { + project("simple-js-executable", gradleVersion) { + buildGradleKts.appendText( + """ + | + |tasks.named("compileProductionExecutableKotlinJs").configure { + | kotlinOptions { + | freeCompilerArgs += "-Xir-dce=false" + | freeCompilerArgs += "-Xir-minimized-member-names=false" + | } + | + | doLast { + | kotlinOptions { + | if (freeCompilerArgs.single { it.startsWith("-Xir-dce") } != "-Xir-dce=false") throw GradleException("fail1") + | if ( + | freeCompilerArgs + | .single { it.startsWith("-Xir-minimized-member-names") } != "-Xir-minimized-member-names=false" + | ) throw GradleException("fail2") + | } + | } + |} + """.trimMargin() + ) + + build("build") { + assertFileInProjectNotExists("build/js/packages/kotlin-js-nodejs/kotlin/") + } + } + } } @JsGradlePluginTests diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/build.gradle.kts new file mode 100644 index 00000000000..48f94501580 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + kotlin("js") +} + +group = "com.example" +version = "1.0" + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + js { + binaries.executable() + nodejs() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/settings.gradle.kts new file mode 100644 index 00000000000..6af4851f564 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "js-executable" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/kotlin/Main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/kotlin/Main.kt new file mode 100644 index 00000000000..c57768be63f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/kotlin/Main.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package com.example + +fun main() { + println("Hello, Yarn") +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/resources/main.js b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/resources/main.js new file mode 100644 index 00000000000..5be36ccb7d9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simple-js-executable/src/main/resources/main.js @@ -0,0 +1 @@ +console.log("hello") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index a9c891908ce..cb8625a068c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -179,7 +179,12 @@ abstract class KotlinJsIrLink @Inject constructor( } private fun KotlinJsOptions.configureOptions(vararg additionalCompilerArgs: String) { - freeCompilerArgs += additionalCompilerArgs.toList() + + freeCompilerArgs += additionalCompilerArgs + .mapNotNull { arg -> + if (kotlinOptions.freeCompilerArgs + .any { it.startsWith(arg) } + ) null else arg + } + PRODUCE_JS + "$ENTRY_IR_MODULE=${entryModule.get().asFile.canonicalPath}"