From c42cedc0d0bcee68136c3d3d72f4492c55f9e4bb Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Mon, 14 Mar 2022 17:09:29 +0100 Subject: [PATCH] [Gradle] Use METADATA attribute when no compatibility variant enabled Consumer configurations with following set of attributes: * org.gradle.usage = 'kotlin-api' * org.jetbrains.kotlin.platform.type = 'common' are supposed to consume legacy `*.kotlin_metadata` artifacts. And can be consumed by HMPP project with "Compatibility Metadata Variant Enabled" flag. For such purpose `metadataCompileClasspath` configuration is configured with attributes mentioned above. There is no sense to consume such artifacts in HMPP projects without compatibility metadata variant. And in order to prevent breaking changes in KGP ecosystem, legacy configurations are reconfigured to consume new KLIB metadata artifacts. Instead of failing on resolution. ^KT-50925 Verification Pending --- .../kotlin/gradle/plugin/mpp/KotlinUsages.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt index ef87b5ae7f5..324e0689522 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt @@ -8,11 +8,17 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project import org.gradle.api.attributes.* import org.gradle.api.attributes.Usage.* +import org.gradle.kotlin.dsl.findByType +import org.gradle.kotlin.dsl.hasPlugin +import org.jetbrains.kotlin.gradle.dsl.KotlinCommonProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformCommonPlugin import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.androidJvm -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.jvm +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.* import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.usageByName +import org.jetbrains.kotlin.gradle.targets.metadata.isCompatibilityMetadataVariantEnabled import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled object KotlinUsages { @@ -27,8 +33,11 @@ object KotlinUsages { private val jvmPlatformTypes: Set = setOf(jvm, androidJvm) internal fun consumerApiUsage(project: Project, platformType: KotlinPlatformType) = project.usageByName( - when (platformType) { - in jvmPlatformTypes -> JAVA_API + when { + platformType in jvmPlatformTypes -> JAVA_API + platformType == common + && project.kotlinExtension is KotlinMultiplatformExtension + && !project.isCompatibilityMetadataVariantEnabled -> KOTLIN_METADATA else -> KOTLIN_API } )