From 4e13b7a202bda503ef25b8be1c7240d23cdeec06 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 20 Jan 2023 17:40:05 +0000 Subject: [PATCH] [Gradle, JS] Add nullable custom fields ^KT-42395 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 26 +++++++++++++++++++ .../app/build.gradle.kts | 5 +++- .../gradle/targets/js/npm/PackageJson.kt | 5 ++-- 3 files changed, 33 insertions(+), 3 deletions(-) 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 15dca785d67..d1d3127ba49 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 @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.gradle import com.google.gson.Gson +import com.google.gson.JsonNull +import com.google.gson.JsonObject import org.gradle.api.logging.LogLevel import org.gradle.api.logging.configuration.WarningMode import org.gradle.testkit.runner.BuildResult @@ -1112,6 +1114,30 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) } } + @DisplayName("package.json custom fields") + @GradleTest + fun testPackageJsonCustomField(gradleVersion: GradleVersion) { + project("kotlin-js-browser-project", gradleVersion) { + buildGradleKts.modify(::transformBuildScriptWithPluginsDsl) + + build("rootPackageJson") { + assertTasksExecuted(":app:packageJson") + + val jso = projectPath.resolve("build/js/packages/kotlin-js-browser-app") + .resolve(NpmProject.PACKAGE_JSON) + .let { + Gson().fromJson(it.readText(), JsonObject::class.java) + } + + assertEquals(1, jso.get("customField1").asJsonObject.get("one").asInt) + assertEquals(2, jso.get("customField1").asJsonObject.get("two").asInt) + assertEquals(JsonNull.INSTANCE, jso.get("customField2").asJsonNull) + assertEquals(JsonNull.INSTANCE, jso.get("customField3").asJsonNull) + assertEquals(JsonNull.INSTANCE, jso.get("customField4").asJsonObject.get("foo").asJsonNull) + } + } + } + @DisplayName("kotlin/js compiler warning") @GradleTest fun testKotlinJsCompilerWarn(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts index 7fc6d00b853..e41c9e39f3d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts @@ -47,7 +47,10 @@ kotlin { compilations.named("main") { packageJson { - customField("customField", mapOf("one" to 1, "two" to 2)) + customField("customField1", mapOf("one" to 1, "two" to 2)) + customField("customField2", null) + customField("customField3" to null) + customField("customField4", mapOf("foo" to null)) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt index 5e72b6d88b1..af543f40ec8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt @@ -58,11 +58,11 @@ class PackageJson( val bundledDependencies = mutableListOf() get() = field ?: mutableListOf() - fun customField(pair: Pair) { + fun customField(pair: Pair) { customFields[pair.first] = pair.second } - fun customField(key: String, value: Any) { + fun customField(key: String, value: Any?) { customFields[key] = value } @@ -92,6 +92,7 @@ class PackageJson( val gson = GsonBuilder() .setPrettyPrinting() .disableHtmlEscaping() + .serializeNulls() .addSerializationExclusionStrategy( object : ExclusionStrategy { override fun shouldSkipField(f: FieldAttributes?): Boolean =