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