diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index a13c1966c95..1ccd07dc9be 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -57,6 +57,7 @@ + @@ -7995,6 +7996,12 @@ + + + + + + @@ -8039,6 +8046,12 @@ + + + + + + @@ -8091,6 +8104,12 @@ + + + + + + @@ -8135,6 +8154,12 @@ + + + + + + @@ -8293,6 +8318,12 @@ + + + + + + @@ -8323,6 +8354,12 @@ + + + + + + @@ -8383,6 +8420,12 @@ + + + + + + @@ -8425,6 +8468,12 @@ + + + + + + diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/build.gradle.kts b/repo/gradle-settings-conventions/internal-gradle-setup/build.gradle.kts index e4dca6edd8b..3f1d999e6c1 100644 --- a/repo/gradle-settings-conventions/internal-gradle-setup/build.gradle.kts +++ b/repo/gradle-settings-conventions/internal-gradle-setup/build.gradle.kts @@ -1,6 +1,7 @@ plugins { `kotlin-dsl` - id("org.jetbrains.kotlin.jvm") + kotlin("jvm") + kotlin("plugin.serialization") } repositories { @@ -8,8 +9,19 @@ repositories { gradlePluginPortal() } +dependencies { + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0") + implementation(kotlin("test-junit5")) +} + kotlin.jvmToolchain(8) +tasks { + test { + useJUnitPlatform() + } +} + gradlePlugin { plugins { create("internal-gradle-setup") { diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt new file mode 100644 index 00000000000..61347d410ef --- /dev/null +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2023 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 org.jetbrains.kotlin.build + +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import java.io.BufferedReader +import java.io.InputStream +import java.io.InputStreamReader +import kotlin.streams.asSequence + +@Serializable +internal data class SetupFile( + val properties: Map, +) + +// can't use decodeFromStream: https://github.com/Kotlin/kotlinx.serialization/issues/2218 +internal fun parseSetupFile(inputStream: InputStream): SetupFile = + Json.decodeFromString(BufferedReader(InputStreamReader(inputStream)).lines().asSequence().joinToString("\n")) \ No newline at end of file diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt new file mode 100644 index 00000000000..261d7e8e945 --- /dev/null +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2023 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 org.jetbrains.kotlin.build + +import kotlin.test.* + +class SetupFileParseTest { + private fun openPropertiesJsonStream() = + SetupFileParseTest::class.java.classLoader.getResourceAsStream("properties.json") + ?: error("No properties.json file found in test resources") + + @Test + fun testSimpleParsing() { + val setupFile = openPropertiesJsonStream().use { + parseSetupFile(it) + } + assertEquals( + mapOf( + "newProperty1" to "someValue", + "newProperty2" to "someOtherValue", + "alreadySetProperty" to "newValue", + ), + setupFile.properties + ) + } +} \ No newline at end of file diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties.json b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties.json new file mode 100644 index 00000000000..61d9adddbac --- /dev/null +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties.json @@ -0,0 +1,7 @@ +{ + "properties": { + "newProperty1": "someValue", + "newProperty2": "someOtherValue", + "alreadySetProperty": "newValue" + } +} \ No newline at end of file