Build Tooling Metadata 1.1.0: Add isKPMEnabled flag

Build Tooling Metadata now can carry information whether project
built with Kotlin Project Model or not.

KT-49704
This commit is contained in:
Anton Lakotka
2022-02-25 10:49:14 +01:00
parent 5f1977083d
commit 2dc774c1fe
5 changed files with 127 additions and 4 deletions
@@ -30,6 +30,7 @@ private fun KotlinToolingMetadata.ProjectSettings.toJsonObject(): JsonObject {
return JsonObject().apply {
addProperty("isHmppEnabled", isHmppEnabled)
addProperty("isCompatibilityMetadataVariantEnabled", isCompatibilityMetadataVariantEnabled)
addProperty("isKPMEnabled", isKPMEnabled)
}
}
@@ -138,7 +139,8 @@ private fun JsonObject.toKotlinToolingMetadataOrThrow(): KotlinToolingMetadata {
private fun JsonObject.toProjectSettingsOrThrow(): KotlinToolingMetadata.ProjectSettings {
return KotlinToolingMetadata.ProjectSettings(
isHmppEnabled = getOrThrow("isHmppEnabled").asBoolean,
isCompatibilityMetadataVariantEnabled = getOrThrow("isCompatibilityMetadataVariantEnabled").asBoolean
isCompatibilityMetadataVariantEnabled = getOrThrow("isCompatibilityMetadataVariantEnabled").asBoolean,
isKPMEnabled = get("isKPMEnabled")?.asBoolean ?: false
)
}
@@ -31,6 +31,7 @@ data class KotlinToolingMetadata(
data class ProjectSettings(
val isHmppEnabled: Boolean,
val isCompatibilityMetadataVariantEnabled: Boolean,
val isKPMEnabled: Boolean,
)
data class ProjectTargetMetadata(
@@ -68,7 +69,7 @@ data class KotlinToolingMetadata(
}
companion object {
const val currentSchemaVersion: String = "1.0.0"
const val currentSchemaVersion: String = "1.1.0"
}
}
@@ -62,7 +62,7 @@ class DeserializationFailureTest {
buildSystemVersion = "",
buildPlugin = "",
buildPluginVersion = "",
projectSettings = KotlinToolingMetadata.ProjectSettings(false, false),
projectSettings = KotlinToolingMetadata.ProjectSettings(false, false, false),
projectTargets = emptyList()
).toJsonString()
@@ -81,6 +81,7 @@ class DeserializeStringTest {
assertEquals("1.6.255-SNAPSHOT", metadata.buildPluginVersion)
assertFalse(metadata.projectSettings.isHmppEnabled)
assertTrue(metadata.projectSettings.isCompatibilityMetadataVariantEnabled)
assertFalse(metadata.projectSettings.isKPMEnabled)
assertEquals(5, metadata.projectTargets.size, "Expected exactly 4 targets")
val androidJvmTarget = metadata.projectTargets.single { it.platformType == "androidJvm" }
@@ -124,4 +125,122 @@ class DeserializeStringTest {
assertNull(commonTarget.extras.js)
assertNull(commonTarget.extras.native)
}
@Test
fun `schemaVersion 1 1 0`() {
@Language("JSON") val json = """
{
"schemaVersion": "1.1.0",
"buildSystem": "Gradle",
"buildSystemVersion": "7.1",
"buildPlugin": "org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper",
"buildPluginVersion": "1.6.255-SNAPSHOT",
"projectSettings": {
"isHmppEnabled": false,
"isCompatibilityMetadataVariantEnabled": true,
"isKPMEnabled": true
},
"projectTargets": [
{
"target": "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget",
"platformType": "androidJvm",
"extras": {
"android": {
"sourceCompatibility": "1.7",
"targetCompatibility": "1.7"
}
}
},
{
"target": "org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget",
"platformType": "js",
"extras": {
"js": {
"isBrowserConfigured": true,
"isNodejsConfigured": true
}
}
},
{
"target": "org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget",
"platformType": "jvm",
"extras": {
"jvm": {
"jvmTarget": "1.8",
"withJavaEnabled": false
}
}
},
{
"target": "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests",
"platformType": "native",
"extras": {
"native": {
"konanTarget": "linux_x64",
"konanVersion": "1.5-dev-17775",
"konanAbiVersion": "1.4.2"
}
}
},
{
"target": "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget",
"platformType": "common"
}
]
}
""".trimIndent()
val metadata = KotlinToolingMetadata.parseJsonOrThrow(json)
assertEquals("1.1.0", metadata.schemaVersion)
assertEquals("Gradle", metadata.buildSystem)
assertEquals("7.1", metadata.buildSystemVersion)
assertEquals("org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper", metadata.buildPlugin)
assertEquals("1.6.255-SNAPSHOT", metadata.buildPluginVersion)
assertFalse(metadata.projectSettings.isHmppEnabled)
assertTrue(metadata.projectSettings.isCompatibilityMetadataVariantEnabled)
assertTrue(metadata.projectSettings.isKPMEnabled)
assertEquals(5, metadata.projectTargets.size, "Expected exactly 4 targets")
val androidJvmTarget = metadata.projectTargets.single { it.platformType == "androidJvm" }
assertEquals("org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget", androidJvmTarget.target)
assertEquals("1.7", androidJvmTarget.extras.android?.sourceCompatibility)
assertEquals("1.7", androidJvmTarget.extras.android?.targetCompatibility)
assertNull(androidJvmTarget.extras.jvm)
assertNull(androidJvmTarget.extras.js)
assertNull(androidJvmTarget.extras.native)
val jsTarget = metadata.projectTargets.single { it.platformType == "js" }
assertEquals("org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget", jsTarget.target)
assertEquals(true, jsTarget.extras.js?.isBrowserConfigured)
assertEquals(true, jsTarget.extras.js?.isNodejsConfigured)
assertNull(jsTarget.extras.android)
assertNull(jsTarget.extras.jvm)
assertNull(jsTarget.extras.native)
val jvmTarget = metadata.projectTargets.single { it.platformType == "jvm" }
assertEquals("org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget", jvmTarget.target)
assertEquals(false, jvmTarget.extras.jvm?.withJavaEnabled)
assertEquals("1.8", jvmTarget.extras.jvm?.jvmTarget)
assertNull(jvmTarget.extras.android)
assertNull(jvmTarget.extras.js)
assertNull(jvmTarget.extras.native)
val nativeTarget = metadata.projectTargets.single { it.platformType == "native" }
assertEquals("org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests", nativeTarget.target)
val nativeExtras = assertNotNull(nativeTarget.extras.native)
assertEquals("linux_x64", nativeExtras.konanTarget)
assertEquals("1.5-dev-17775", nativeExtras.konanVersion)
assertEquals("1.4.2", nativeExtras.konanAbiVersion)
assertNull(nativeTarget.extras.android)
assertNull(nativeTarget.extras.jvm)
assertNull(nativeTarget.extras.js)
val commonTarget = metadata.projectTargets.single { it.platformType == "common" }
assertEquals("org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget", commonTarget.target)
assertNull(commonTarget.extras.android)
assertNull(commonTarget.extras.jvm)
assertNull(commonTarget.extras.js)
assertNull(commonTarget.extras.native)
}
}
@@ -91,7 +91,8 @@ private fun defaultKotlinToolingMetadata(): KotlinToolingMetadata {
buildPluginVersion = "v1.0 (build plugin)",
projectSettings = KotlinToolingMetadata.ProjectSettings(
isHmppEnabled = false,
isCompatibilityMetadataVariantEnabled = true
isCompatibilityMetadataVariantEnabled = true,
isKPMEnabled = false,
),
projectTargets = emptyList()
)