From 7ffb232a9550ab0795668dd219b5353228b276e9 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 28 Mar 2022 22:44:33 +0200 Subject: [PATCH] Remove 'kotlin-dce-js' Gradle plugin ^KT-48276 In Progress --- .../kotlin/gradle/BuildCacheRelocationIT.kt | 23 ++--- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 58 ++++++------ .../kotlin/gradle/NewMultiplatformIT.kt | 6 +- .../kotlin/gradle/native/GeneralNativeIT.kt | 26 +----- .../gradle/testbase/projectSetupDefaults.kt | 4 - .../kotlin/gradle/testbase/testAssertions.kt | 5 + .../kotlin-js-dce/libraryProject/build.gradle | 26 ++++++ .../src/main/kotlin/examplelib/lib.kt | 0 .../kotlin-js-dce/mainProject/build.gradle | 45 +++++++++ .../mainProject/check.js | 0 .../src/main/kotlin/exampleapp/main.kt | 0 .../settings.gradle | 0 .../kotlin-js-plugin-project/build.gradle.kts | 14 ++- .../kotlin-js-plugin-project/tests_pre6.6.xml | 9 -- .../libraryProject/build.gradle | 31 ------- .../mainProject/build.gradle | 42 --------- .../TEST-TestKt-iOSsim_pre6.6.xml | 18 ---- .../native-tests/TEST-TestKt_pre6.6.xml | 16 ---- .../libraryProject/build.gradle | 4 +- .../new-mpp-js-dce/mainProject/build.gradle | 42 +++++---- .../kotlin/exampleapp/main.kt | 0 .../gradle/plugin/mpp/kotlinCompilations.kt | 3 + .../gradle/targets/js/KotlinJsDcePlugin.kt | 92 ------------------- .../targets/js/subtargets/KotlinBrowserJs.kt | 29 ++++-- .../gradle-plugins/kotlin-dce-js.properties | 1 - 25 files changed, 183 insertions(+), 311 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/build.gradle rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/{kotlin2JsDceProject => kotlin-js-dce}/libraryProject/src/main/kotlin/examplelib/lib.kt (100%) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/build.gradle rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/{kotlin2JsDceProject => kotlin-js-dce}/mainProject/check.js (100%) rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/{kotlin2JsDceProject => kotlin-js-dce}/mainProject/src/main/kotlin/exampleapp/main.kt (100%) rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/{kotlin2JsDceProject => kotlin-js-dce}/settings.gradle (100%) delete mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/tests_pre6.6.xml delete mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/build.gradle delete mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/build.gradle delete mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt-iOSsim_pre6.6.xml delete mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt_pre6.6.xml rename libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/src/{nodeJsMain => browserMain}/kotlin/exampleapp/main.kt (100%) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin-dce-js.properties diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt index cf352c6f033..1884ab3c367 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt @@ -72,27 +72,18 @@ class BuildCacheRelocationIT : KGPBaseTest() { @JsGradlePluginTests @DisplayName("works with JS/DCE project") @GradleTest - fun testRelocationKotlin2JsDce(gradleVersion: GradleVersion) { + fun testRelocationKotlinJs(gradleVersion: GradleVersion) { val (firstProject, secondProject) = prepareTestProjects( - "kotlin2JsDceProject", - gradleVersion - ) { testProject -> - // Fix the problem that the destinationDir of compile task (i.e. buildDir) contains files from other tasks: - testProject.subProject("mainProject").buildGradle.modify { - it.replace("/exampleapp.js", "/web/exampleapp.js") - } - testProject.subProject("libraryProject").buildGradle.modify { - it.replace("/exampleapp.js", "/web/exampleapp.js") - // Fix assembling the JAR from the whole buildDir - it.replace("from buildDir", "from compileKotlin2Js.destinationDirectory") - } - } + "kotlin-js-dce", + gradleVersion, + buildOptions = defaultBuildOptions.copy(warningMode = WarningMode.Summary) // Jar tasks produces deprecation warnings + ) checkBuildCacheRelocation( firstProject, secondProject, - listOf("assemble", "runDceKotlinJs"), - listOf(":libraryProject:compileKotlin2Js", ":mainProject:compileKotlin2Js", ":mainProject:runDceKotlinJs") + listOf("assemble"), + listOf(":libraryProject:compileKotlinJs", ":mainProject:compileKotlinJs", ":mainProject:processDceKotlinJs") ) } 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 b46615335b8..cf9fa273abb 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 @@ -299,12 +299,12 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { @DisplayName("DCE minifies output file") @GradleTest fun testDce(gradleVersion: GradleVersion) { - project("kotlin2JsDceProject", gradleVersion) { + project("kotlin-js-dce", gradleVersion) { build("runRhino") { - val pathPrefix = "mainProject/build/kotlin-js-min/main" + val pathPrefix = "mainProject/build/kotlin-js-min" assertFileInProjectExists("$pathPrefix/exampleapp.js.map") assertFileInProjectExists("$pathPrefix/examplelib.js.map") - assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../../src/main/kotlin/exampleapp/main.kt\"") + assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../src/main/kotlin/exampleapp/main.kt\"") val kotlinJs = projectPath.resolve("$pathPrefix/kotlin.js") assertFileExists(kotlinJs) @@ -319,14 +319,20 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { @DisplayName("DCE output directory can be changed") @GradleTest fun testDceOutputPath(gradleVersion: GradleVersion) { - project("kotlin2JsDceProject", gradleVersion) { + project("kotlin-js-dce", gradleVersion) { subProject("mainProject").buildGradle.modify { originalScript -> buildString { - append(originalScript) + append( + originalScript + .lines() + .filterNot { it.contains("destinationDirectory") } + .joinToString(separator = "\n") + ) append( """ - | - |runDceKotlinJs.dceOptions.outputDirectory = "${'$'}{buildDir}/min" + |tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJsDce).configureEach { + | destinationDirectory = project.layout.buildDirectory.dir("min") + |} |runRhino.args = ["-f", "min/kotlin.js", "-f", "min/examplelib.js", "-f", "min/exampleapp.js", "-f", "../check.js"] """.trimMargin() ) @@ -348,19 +354,18 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { @DisplayName("DCE in dev mode doesn't minify output file") @GradleTest fun testDceDevMode(gradleVersion: GradleVersion) { - project("kotlin2JsDceProject", gradleVersion) { - subProject("mainProject").buildGradle.appendText( - """ - | - |runDceKotlinJs.dceOptions.devMode = true - | - """.trimMargin() - ) + project("kotlin-js-dce", gradleVersion) { + subProject("mainProject").buildGradle.modify { + it.replace( + "browser()", + "browser { dceTask { dceOptions.devMode = true }}" + ) + } build("runRhino") { - val pathPrefix = "mainProject/build/kotlin-js-min/main" + val pathPrefix = "mainProject/build/kotlin-js-min" assertFileInProjectExists("$pathPrefix/examplelib.js.map") - assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../../src/main/kotlin/exampleapp/main.kt\"") + assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../src/main/kotlin/exampleapp/main.kt\"") val kotlinJs = projectPath.resolve("$pathPrefix/kotlin.js") assertFileExists(kotlinJs) @@ -372,15 +377,15 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { @DisplayName("DCE minifies FileCollection dependencies") @GradleTest fun testDceFileCollectionDependency(gradleVersion: GradleVersion) { - project("kotlin2JsDceProject", gradleVersion) { + project("kotlin-js-dce", gradleVersion) { subProject("mainProject").buildGradle.modify { it.replace("compile project(\":libraryProject\")", "compile project(\":libraryProject\").sourceSets.main.output") } build("runRhino") { - val pathPrefix = "mainProject/build/kotlin-js-min/main" + val pathPrefix = "mainProject/build/kotlin-js-min" assertFileInProjectExists("$pathPrefix/examplelib.js.map") - assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../../src/main/kotlin/exampleapp/main.kt\"") + assertFileInProjectContains("$pathPrefix/exampleapp.js.map", "\"../../src/main/kotlin/exampleapp/main.kt\"") val kotlinJs = projectPath.resolve("$pathPrefix/kotlin.js") assertFileExists(kotlinJs) @@ -693,10 +698,10 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) ) fun testNewKotlinJsPlugin(gradleVersion: GradleVersion) { project("kotlin-js-plugin-project", gradleVersion) { - build("publish", "runDceKotlin", "test", "runDceBenchmarkKotlin") { + build("publish", "processDceKotlinJs", "test", "processDceBenchmarkKotlinJs") { assertTasksExecuted( ":compileKotlinJs", ":compileTestKotlinJs", ":compileBenchmarkKotlinJs", - ":runDceKotlin", ":runDceBenchmarkKotlin" + ":processDceKotlinJs", ":processDceBenchmarkKotlinJs" ) val moduleDir = projectPath.resolve("build/repo/com/example/kotlin-js-plugin/1.0/") @@ -710,7 +715,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) val publishedPom = moduleDir.resolve("kotlin-js-plugin-1.0.pom") val kotlinVersion = defaultBuildOptions.kotlinVersion val pomText = publishedPom.readText().replace(Regex("\\s+"), "") - assertTrue { "kotlinx-html-js0.6.12compile" in pomText } + assertTrue { "kotlinx-html-js0.7.5compile" in pomText } assertTrue { "kotlin-stdlib-js$kotlinVersionruntime" in pomText } assertFileExists(moduleDir.resolve("kotlin-js-plugin-1.0-sources.jar")) @@ -726,12 +731,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) assertFileInProjectExists("build/js/node_modules/kotlin-js-plugin-test/kotlin/kotlin-js-plugin-test.js") assertFileInProjectExists("build/js/node_modules/kotlin-js-plugin-test/kotlin/kotlin-js-plugin-test.js.map") - // Gradle 6.6+ slightly changed format of xml test results - if (gradleVersion < GradleVersion.version("6.6")) { - assertTestResults(projectPath.resolve("tests_pre6.6.xml"), "nodeTest") - } else { - assertTestResults(projectPath.resolve("tests.xml"), "nodeTest") - } + assertTestResults(projectPath.resolve("tests.xml"), "nodeTest") } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index e10c434c2e1..d472bcb857f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -1484,12 +1484,12 @@ class NewMultiplatformIT : BaseGradleIT() { fun testJsDceInMpp() = with(Project("new-mpp-js-dce", gradleVersion)) { build("runRhino", options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) { assertSuccessful() - assertTasksExecuted(":mainProject:runDceNodeJsKotlin") + assertTasksExecuted(":mainProject:processDceBrowserKotlinJs") - val pathPrefix = "mainProject/build/kotlin-js-min/nodeJs/main" + val pathPrefix = "mainProject/build/kotlin-js-min/" assertFileExists("$pathPrefix/exampleapp.js.map") assertFileExists("$pathPrefix/examplelib.js.map") - assertFileContains("$pathPrefix/exampleapp.js.map", "\"../../../../src/nodeJsMain/kotlin/exampleapp/main.kt\"") + assertFileContains("$pathPrefix/exampleapp.js.map", "\"../../src/browserMain/kotlin/exampleapp/main.kt\"") assertFileExists("$pathPrefix/kotlin.js") assertTrue(fileInWorkingDir("$pathPrefix/kotlin.js").length() < 500 * 1000, "Looks like kotlin.js file was not minified by DCE") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt index 5c161ea9fa4..fac2ff9be23 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt @@ -6,11 +6,9 @@ package org.jetbrains.kotlin.gradle.native import com.intellij.testFramework.TestDataFile -import org.gradle.util.GradleVersion import org.jdom.input.SAXBuilder import org.jetbrains.kotlin.gradle.BaseGradleIT import org.jetbrains.kotlin.gradle.GradleVersionRequired -import org.jetbrains.kotlin.gradle.chooseWrapperVersionOrFinishTest import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_DISABLE_WARNING_PROPERTY_NAME import org.jetbrains.kotlin.gradle.internals.DISABLED_NATIVE_TARGETS_REPORTER_WARNING_PREFIX import org.jetbrains.kotlin.gradle.internals.NO_NATIVE_STDLIB_PROPERTY_WARNING @@ -737,25 +735,11 @@ class GeneralNativeIT : BaseGradleIT() { } } - // Gradle 6.6+ slightly changed format of xml test results - // If, in the test project, preset name was updated, - // update accordingly test result output for Gradle6.6+ - val testGradleVersion = project.chooseWrapperVersionOrFinishTest() - val expectedHostTestResult: String - val expectedIOSTestResults: List - if (GradleVersion.version(testGradleVersion) < GradleVersion.version("6.6")) { - expectedHostTestResult = "testProject/native-tests/TEST-TestKt_pre6.6.xml" - expectedIOSTestResults = listOf( - "testProject/native-tests/TEST-TestKt_pre6.6.xml", - "testProject/native-tests/TEST-TestKt-iOSsim_pre6.6.xml", - ) - } else { - expectedHostTestResult = "testProject/native-tests/TEST-TestKt.xml" - expectedIOSTestResults = listOf( - "testProject/native-tests/TEST-TestKt-iOSsim.xml", - "testProject/native-tests/TEST-TestKt-iOSArm64sim.xml", - ) - } + val expectedHostTestResult = "testProject/native-tests/TEST-TestKt.xml" + val expectedIOSTestResults = listOf( + "testProject/native-tests/TEST-TestKt-iOSsim.xml", + "testProject/native-tests/TEST-TestKt-iOSArm64sim.xml", + ) assertTestResults(expectedHostTestResult, hostTestTask) // K/N doesn't report line numbers correctly on Linux (see KT-35408). diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt index 4518878a16c..ab2c95258c5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt @@ -50,9 +50,6 @@ internal val DEFAULT_GROOVY_SETTINGS_FILE = case "com.android.feature": useModule("com.android.tools.build:gradle:${'$'}android_tools_version") break - case "kotlin-dce-js": - useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version") - break case "kotlin2js": useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version") break @@ -106,7 +103,6 @@ internal val DEFAULT_KOTLIN_SETTINGS_FILE = "com.android.lint", "com.android.instantapp", "com.android.feature" -> useModule("com.android.tools.build:gradle:${'$'}android_tools_version") - "kotlin-dce-js" -> useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version") "kotlin2js" -> useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testAssertions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testAssertions.kt index f71676d182d..e7871d3c818 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testAssertions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testAssertions.kt @@ -68,6 +68,11 @@ internal fun readAndCleanupTestResults( e.attributes.forEach { if (it.name in skipAttrs) { it.value = "..." + } else if (it.name == "name" && + e.name == "testcase" && + it.value.contains("[browser") + ) { + it.value = it.value.replace("\\[browser,.*]".toRegex(), "[browser]") } } if (e.name == "system-out") { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/build.gradle new file mode 100644 index 00000000000..113ea30f2ee --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/build.gradle @@ -0,0 +1,26 @@ +plugins { + id("org.jetbrains.kotlin.js") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + js { + nodejs() + } +} + +def compileKotlinJs = tasks.named('compileKotlinJs') { + it.kotlinOptions.outputFile = "${buildDir}/web/examplelib.js" + it.kotlinOptions.sourceMap = true +} + +tasks.register('jar', Jar).configure { + dependsOn(compileKotlinJs) + from compileKotlinJs.map { it.destinationDirectory } + include "**/*.js" + include "**/*.js.map" +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/src/main/kotlin/examplelib/lib.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/src/main/kotlin/examplelib/lib.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/src/main/kotlin/examplelib/lib.kt rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/libraryProject/src/main/kotlin/examplelib/lib.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/build.gradle new file mode 100644 index 00000000000..4f9a2fbce81 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/build.gradle @@ -0,0 +1,45 @@ +plugins { + id("org.jetbrains.kotlin.js") +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation project(":libraryProject") + implementation "org.mozilla:rhino:1.7.7.1" +} + +kotlin { + js { + browser() + } +} + +def compileKotlinJs = tasks.named('compileKotlinJs') { + kotlinOptions { + sourceMap = true + outputFile = "${buildDir}/app/exampleapp.js" + suppressWarnings = true + verbose = true + } +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJsDce).configureEach { + keep("exampleapp.exampleapp.status") + destinationDirectory = project.layout.buildDirectory.dir("kotlin-js-min") +} + +tasks.register('runRhino', JavaExec) { + dependsOn(tasks.named('processDceKotlinJs')) + classpath = configurations.runtimeClasspath + workingDir = "${buildDir}" + mainClass = 'org.mozilla.javascript.tools.shell.Main' + args = ["-opt", "-1", + "-f", "kotlin-js-min/kotlin.js", + "-f", "kotlin-js-min/examplelib.js", + "-f", "kotlin-js-min/exampleapp.js", + "-f", "../check.js"] +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/check.js b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/check.js similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/check.js rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/check.js diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/src/main/kotlin/exampleapp/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/src/main/kotlin/exampleapp/main.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/src/main/kotlin/exampleapp/main.kt rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/mainProject/src/main/kotlin/exampleapp/main.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/settings.gradle similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/settings.gradle rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dce/settings.gradle diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/build.gradle.kts index e15f3dbd8ce..b67eb5a8be0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/build.gradle.kts @@ -1,6 +1,5 @@ plugins { kotlin("js") - id("kotlin-dce-js") `maven-publish` } @@ -10,13 +9,13 @@ version = "1.0" repositories { mavenLocal() mavenCentral() - maven { url = uri("https://jcenter.bintray.com/") } + maven { setUrl("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") } } kotlin.sourceSets { getByName("main") { dependencies { - api("org.jetbrains.kotlinx:kotlinx-html-js:0.6.12") + api("org.jetbrains.kotlinx:kotlinx-html-js:0.7.5") implementation(kotlin("stdlib-js")) } } @@ -29,6 +28,15 @@ kotlin.sourceSets { kotlin.target { nodejs() + browser { + testTask { + useKarma { + useChromeHeadless() + } + enabled = false // Task is disabled because it requires browser to be installed. That may be a problem on CI. + // Disabled but configured task allows us to check at least a part of configuration cache correctness. + } + } } kotlin.target.compilations.create("benchmark") { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/tests_pre6.6.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/tests_pre6.6.xml deleted file mode 100644 index 23f889c00c0..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-plugin-project/tests_pre6.6.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/build.gradle deleted file mode 100644 index d32d1026f23..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/libraryProject/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -apply plugin: 'kotlin2js' - -repositories { - mavenLocal() - mavenCentral() -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" -} - -compileKotlin2Js.kotlinOptions.outputFile = "${buildDir}/examplelib.js" -compileKotlin2Js.kotlinOptions.sourceMap = true - -jar { - from buildDir - include "**/*.js" - include "**/*.js.map" -} - -jar.dependsOn(compileKotlin2Js) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/build.gradle deleted file mode 100644 index 02f628ed44e..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsDceProject/mainProject/build.gradle +++ /dev/null @@ -1,42 +0,0 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -apply plugin: "kotlin2js" -apply plugin: "kotlin-dce-js" - -repositories { - mavenLocal() - mavenCentral() -} - -dependencies { - implementation project(":libraryProject") - implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" - implementation "org.mozilla:rhino:1.7.7.1" -} - -compileKotlin2Js.kotlinOptions.sourceMap = true -compileKotlin2Js.kotlinOptions.outputFile = "${buildDir}/exampleapp.js" -compileKotlin2Js.kotlinOptions.suppressWarnings = true -compileKotlin2Js.kotlinOptions.verbose = true -runDceKotlinJs.keep("exampleapp.exampleapp.status") - -task runRhino(type: JavaExec) { - classpath = sourceSets.main.runtimeClasspath - workingDir = "${buildDir}" - main = 'org.mozilla.javascript.tools.shell.Main' - args = ["-opt", "-1", - "-f", "kotlin-js-min/main/kotlin.js", - "-f", "kotlin-js-min/main/examplelib.js", - "-f", "kotlin-js-min/main/exampleapp.js", - "-f", "../check.js"] -} - -runRhino.dependsOn(runDceKotlinJs) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt-iOSsim_pre6.6.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt-iOSsim_pre6.6.xml deleted file mode 100644 index 5c971ac8664..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt-iOSsim_pre6.6.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - ... - - - - - \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt_pre6.6.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt_pre6.6.xml deleted file mode 100644 index 2b7c909a364..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/native-tests/TEST-TestKt_pre6.6.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - ... - - - - - \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/libraryProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/libraryProject/build.gradle index 6ed6da6ab89..0fce16ee9ba 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/libraryProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/libraryProject/build.gradle @@ -15,7 +15,9 @@ repositories { mavenCentral() } -kotlin.targets.fromPreset(kotlin.presets.js, 'nodeJs') +kotlin.targets.fromPreset(kotlin.presets.js, 'nodeJs') { + nodejs() +} dependencies { nodeJsMainApi "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle index d3a619fb31b..08c6f3b7990 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle @@ -9,36 +9,44 @@ buildscript { } apply plugin: "kotlin-multiplatform" -apply plugin: "kotlin-dce-js" repositories { mavenLocal() mavenCentral() } -kotlin.targets.fromPreset(kotlin.presets.js, 'nodeJs') +kotlin.targets.fromPreset(kotlin.presets.js, 'browser') { + browser() +} dependencies { - nodeJsImplementation project(":libraryProject") - nodeJsImplementation "org.jetbrains.kotlin:kotlin-stdlib-js" - nodeJsImplementation "org.mozilla:rhino:1.7.7.1" + browserImplementation project(":libraryProject") + browserImplementation "org.jetbrains.kotlin:kotlin-stdlib-js" + browserImplementation "org.mozilla:rhino:1.7.7.1" } -compileKotlinNodeJs.kotlinOptions.sourceMap = true -compileKotlinNodeJs.kotlinOptions.outputFile = "${buildDir}/exampleapp.js" -compileKotlinNodeJs.kotlinOptions.suppressWarnings = true -compileKotlinNodeJs.kotlinOptions.verbose = true -runDceNodeJsKotlin.keep("exampleapp.exampleapp.status") +tasks.named('compileKotlinBrowser') { + kotlinOptions { + sourceMap = true + outputFile = "${buildDir}/web/exampleapp.js" + suppressWarnings = true + verbose = true + } +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJsDce).configureEach { + keep("exampleapp.exampleapp.status") + destinationDirectory = project.layout.buildDirectory.dir("kotlin-js-min") +} task runRhino(type: JavaExec) { - classpath = kotlin.targets.nodeJs.compilations.main.runtimeDependencyFiles + dependsOn(tasks.named('processDceBrowserKotlinJs')) + classpath = kotlin.targets.browser.compilations.main.runtimeDependencyFiles workingDir = "${buildDir}" - main = 'org.mozilla.javascript.tools.shell.Main' + mainClass = 'org.mozilla.javascript.tools.shell.Main' args = ["-opt", "-1", - "-f", "kotlin-js-min/nodeJs/main/kotlin.js", - "-f", "kotlin-js-min/nodeJs/main/examplelib.js", - "-f", "kotlin-js-min/nodeJs/main/exampleapp.js", + "-f", "kotlin-js-min/kotlin.js", + "-f", "kotlin-js-min/examplelib.js", + "-f", "kotlin-js-min/exampleapp.js", "-f", "../check.js"] } - -runRhino.dependsOn(runDceNodeJsKotlin) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/src/nodeJsMain/kotlin/exampleapp/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/src/browserMain/kotlin/exampleapp/main.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/src/nodeJsMain/kotlin/exampleapp/main.kt rename to libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/src/browserMain/kotlin/exampleapp/main.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 785be51fea1..578e4297b49 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -38,6 +38,9 @@ internal fun KotlinCompilation<*>.composeName(prefix: String? = null, suffix: St internal fun KotlinCompilation<*>.isMain(): Boolean = name == KotlinCompilation.MAIN_COMPILATION_NAME +internal fun KotlinCompilation<*>.isTest(): Boolean = + name == KotlinCompilation.TEST_COMPILATION_NAME + /** * see https://youtrack.jetbrains.com/issue/KT-45412 * Some implementations of [KotlinCompilation] are not including their [KotlinCompilation.defaultSourceSet] into [kotlinSourceSet]s diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt deleted file mode 100644 index 946abc5ce5a..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsDcePlugin.kt +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2010-2020 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. - */ - -@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility -package org.jetbrains.kotlin.gradle.plugin - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile -import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce -import org.jetbrains.kotlin.gradle.tasks.dependsOn -import org.jetbrains.kotlin.gradle.tasks.registerTask -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName -import java.io.File - -class KotlinJsDcePlugin : Plugin { - override fun apply(project: Project) { - project.logger.warn( - """ - The `kotlin-dce-js` Gradle plugin has been deprecated. - DCE is now integrated in the `org.jetbrains.kotlin.js` plugin. - For plugin usage details, see https://kotlinlang.org/docs/reference/js-project-setup.html. - For more details about JavaScript DCE, see https://kotlinlang.org/docs/reference/javascript-dce.html - """.trimIndent() - ) - val kotlinExtension = - project.multiplatformExtensionOrNull - ?: project.extensions.getByName("kotlin") as? KotlinSingleTargetExtension - ?: run { - project.pluginManager.apply(Kotlin2JsPluginWrapper::class.java) - project.kotlinExtension as KotlinSingleTargetExtension - } - - fun forEachJsTarget(action: (KotlinTarget) -> Unit) { - when (kotlinExtension) { - is KotlinSingleTargetExtension -> action(kotlinExtension.target) - is KotlinMultiplatformExtension -> - kotlinExtension.targets - .matching { it.platformType == KotlinPlatformType.js } - .all { action(it) } - } - } - - forEachJsTarget { - it.compilations.all { processCompilation(project, it) } - } - } - - private fun processCompilation(project: Project, kotlinCompilation: KotlinCompilation<*>) { - val kotlinTask = kotlinCompilation.compileKotlinTaskProvider - val dceTaskName = lowerCamelCaseName( - DCE_TASK_PREFIX, - kotlinCompilation.target.disambiguationClassifier, - kotlinCompilation.name.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, - if (kotlinCompilation.target is KotlinWithJavaTarget<*>) TASK_SUFFIX else MPP_TASK_SUFFIX - ) - - val dceTask = project.registerTask(dceTaskName) { - it.dependsOn(kotlinTask) - it.defaultCompilerClasspath.setFrom(project.configurations.named(COMPILER_CLASSPATH_CONFIGURATION_NAME)) - } - project.tasks.named("build").dependsOn(dceTask) - - project.afterEvaluate { - val outputDir = project.buildDir - .resolve(DEFAULT_OUT_DIR) - .resolve(kotlinCompilation.target.disambiguationClassifier?.let { "$it/" }.orEmpty() + kotlinCompilation.name) - - val configuration = project.configurations.getByName(kotlinCompilation.compileDependencyConfigurationName) - - dceTask.configure { - it.libraries.from(configuration) - it.destinationDirectory.set(it.dceOptions.outputDirectory?.let { File(it) } ?: outputDir) - it.setSource(kotlinTask.map { task -> (task as Kotlin2JsCompile).outputFileProperty }) - } - } - } - - companion object { - private const val TASK_SUFFIX = "kotlinJs" - private const val MPP_TASK_SUFFIX = "kotlin" - private const val DCE_TASK_PREFIX = "runDce" - private const val DEFAULT_OUT_DIR = "kotlin-js-min" - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 141a8d988fc..0dffcdf8bad 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -14,6 +14,8 @@ import org.jetbrains.kotlin.gradle.plugin.COMPILER_CLASSPATH_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.isMain +import org.jetbrains.kotlin.gradle.plugin.mpp.isTest import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.ir.executeTaskBaseName @@ -90,15 +92,12 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : } override fun configureMain(compilation: KotlinJsCompilation) { - val dceTaskProvider = configureDce( - compilation = compilation, - dev = false - ) + val (dceTaskProvider, devDceTaskProvider) = compilation.configureDceTasks() - val devDceTaskProvider = configureDce( - compilation = compilation, - dev = true - ) + // Adding dce tasks to additional JS compilations + target.compilations.configureEach { + if (!it.isMain() && !it.isTest()) it.configureDceTasks() + } configureRun( compilation = compilation, @@ -112,6 +111,20 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) : ) } + private fun KotlinJsCompilation.configureDceTasks(): Pair, TaskProvider> { + val dceTaskProvider = configureDce( + compilation = this, + dev = false + ) + + val devDceTaskProvider = configureDce( + compilation = this, + dev = true + ) + + return dceTaskProvider to devDceTaskProvider + } + private fun configureRun( compilation: KotlinJsCompilation, dceTaskProvider: TaskProvider, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin-dce-js.properties b/libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin-dce-js.properties deleted file mode 100644 index e006c858bd1..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin-dce-js.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=org.jetbrains.kotlin.gradle.plugin.KotlinJsDcePlugin \ No newline at end of file