From 5d8e23e971ec4ba82acd04d95aa08900b0422957 Mon Sep 17 00:00:00 2001 From: Timofey Solonin Date: Tue, 4 Jul 2023 17:52:12 +0200 Subject: [PATCH] [MPP] Don't enable commonization in subprojects of a project where CocoaPods plugin was applied ^KT-58712 --- .../gradle/plugin/PropertiesProvider.kt | 5 ++- .../gradle/unitTests/CommonizerTaskTests.kt | 37 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index 8374b6a3c8a..e2ec92c59dd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -387,7 +387,10 @@ internal class PropertiesProvider private constructor(private val project: Proje private val enableCInteropCommonizationSetByExternalPluginKey = "kotlin.internal.mpp.enableCInteropCommonization.setByExternalPlugin" internal var enableCInteropCommonizationSetByExternalPlugin: Boolean? - get() = booleanProperty(enableCInteropCommonizationSetByExternalPluginKey) + get() { + if (!project.extensions.extraProperties.has(enableCInteropCommonizationSetByExternalPluginKey)) return null + return booleanProperty(enableCInteropCommonizationSetByExternalPluginKey) + } set(value) { project.extensions.extraProperties.set(enableCInteropCommonizationSetByExternalPluginKey, "$value") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CommonizerTaskTests.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CommonizerTaskTests.kt index e7ec64cad01..c2bb76986de 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CommonizerTaskTests.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CommonizerTaskTests.kt @@ -10,10 +10,9 @@ package org.jetbrains.kotlin.gradle.unitTests import org.gradle.api.internal.project.ProjectInternal import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation +import org.jetbrains.kotlin.gradle.targets.native.internal.cInteropCommonizationEnabled import org.jetbrains.kotlin.gradle.util.* -import kotlin.test.Test -import kotlin.test.assertNotNull -import kotlin.test.assertNull +import kotlin.test.* class CommonizerTaskTests { @@ -136,4 +135,36 @@ class CommonizerTaskTests { subproject.tasks.getByName("commonize").assertDependsOn(commonizeCInteropTask) rootProject.assertContainsNoTaskWithName(commonizeCInteropTaskName) } + + @Test + fun `test applying CocoaPods plugin - enables commonization`() { + val rootProject = ProjectBuilder.builder().build() as ProjectInternal + rootProject.applyMultiplatformPlugin() + + rootProject.runLifecycleAwareTest { + assertFalse(rootProject.cInteropCommonizationEnabled()) + + rootProject.applyCocoapodsPlugin() + + assertTrue(rootProject.cInteropCommonizationEnabled()) + } + } + + @Test + fun `test applying CocoaPods plugin - in a root project - enables commonization only in the root project`() { + val rootProject = ProjectBuilder.builder().build() as ProjectInternal + val subproject = ProjectBuilder.builder().withParent(rootProject).build() as ProjectInternal + rootProject.applyMultiplatformPlugin() + subproject.applyMultiplatformPlugin() + + rootProject.runLifecycleAwareTest { + assertFalse(rootProject.cInteropCommonizationEnabled()) + assertFalse(subproject.cInteropCommonizationEnabled()) + + rootProject.applyCocoapodsPlugin() + + assertTrue(rootProject.cInteropCommonizationEnabled()) + assertFalse(subproject.cInteropCommonizationEnabled()) + } + } }