diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt index f2e1aaf2633..67954231a51 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationDefinition.kt @@ -47,6 +47,9 @@ operator fun KotlinGradleFragmentConfigurationDefinit operator fun KotlinGradleFragmentConfigurationDefinition.plus(other: FragmentArtifacts): KotlinGradleFragmentConfigurationDefinition = copy(artifacts = artifacts + other) +operator fun KotlinGradleFragmentConfigurationDefinition.plus(other: FragmentConfigurationRelation): + KotlinGradleFragmentConfigurationDefinition = copy(relations = relations + other) + @AdvancedExternalVariantApi operator fun KotlinGradleFragmentConfigurationDefinition.plus(other: FragmentCapabilities): KotlinGradleFragmentConfigurationDefinition = copy(capabilities = capabilities + other) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationRelation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationRelation.kt index c5fa21569c2..95c12a4dea2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationRelation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinGradleFragmentConfigurationRelation.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.ConfigurationPublications import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation /* Internal abbreviation */ @@ -21,6 +22,33 @@ interface KotlinGradleFragmentConfigurationRelation { } } +operator fun FragmentConfigurationRelation.plus(other: FragmentConfigurationRelation): FragmentConfigurationRelation { + if (this === KotlinGradleFragmentConfigurationRelation.None) return other + if (other === KotlinGradleFragmentConfigurationRelation.None) return this + + if (this is CompositeFragmentConfigurationRelation && other is CompositeFragmentConfigurationRelation) { + return CompositeFragmentConfigurationRelation(this.children + other.children) + } + + if (this is CompositeFragmentConfigurationRelation) { + return CompositeFragmentConfigurationRelation(this.children + other) + } + + if (other is CompositeFragmentConfigurationRelation) { + return CompositeFragmentConfigurationRelation(listOf(this) + other.children) + } + + return CompositeFragmentConfigurationRelation(listOf(this, other)) +} + +internal class CompositeFragmentConfigurationRelation(val children: List) : + FragmentConfigurationRelation { + + override fun setExtendsFrom(configuration: Configuration, context: KotlinGradleFragmentConfigurationContext) { + children.forEach { child -> child.setExtendsFrom(configuration, context) } + } +} + class KotlinGradleFragmentConfigurationRelationContext internal constructor( val configuration: Configuration, context: KotlinGradleFragmentConfigurationContext diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt index b6eebb3fe07..ceeede1e964 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KotlinNativeVariantFactory.kt @@ -26,7 +26,9 @@ data class KotlinNativeVariantConfig( DefaultKotlinCompileDependenciesDefinition + KotlinFragmentKonanTargetAttribute, val apiElements: ConfigurationDefinition = - DefaultKotlinApiElementsDefinition + KotlinFragmentKonanTargetAttribute, + DefaultKotlinApiElementsDefinition + + KotlinFragmentKonanTargetAttribute + + FragmentConfigurationRelation { extendsFrom(dependencies.transitiveImplementationConfiguration) }, val hostSpecificMetadataElements: ConfigurationDefinition = DefaultKotlinHostSpecificMetadataElementsDefinition,