From 49cf386258495a25986ea31ce4b8a1b2ee4bca0b Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 10 Mar 2021 17:11:11 +0100 Subject: [PATCH] Limit CInteropCommonizerTask to only one level of commonization See ^KT-39324 --- .../kotlin/gradle/CInteropCommonizerTaskTest.kt | 17 ++++++++++++++++- .../native/internal/CInteropCommonizerTask.kt | 7 +++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/CInteropCommonizerTaskTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/CInteropCommonizerTaskTest.kt index 3391fee3a13..49492d76a00 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/CInteropCommonizerTaskTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/CInteropCommonizerTaskTest.kt @@ -12,7 +12,6 @@ import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget -import org.jetbrains.kotlin.descriptors.commonizer.SharedCommonizerTarget import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation @@ -115,25 +114,41 @@ class CInteropCommonizerTaskTest { project.evaluate() + /* + //https://youtrack.jetbrains.com/issue/KT-39324 assertEquals( CInteropCommonizationParameters( SharedCommonizerTarget(CommonizerTarget(IOS_X64, IOS_ARM64), CommonizerTarget(MACOS_X64), CommonizerTarget(LINUX_X64)), setOf(linuxInterop, macosInterop, iosX64Interop, iosArm64Interop) ), task.getCommonizationParameters(sharedNativeCompilation(nativeMain)) ) + */ + assertNull( + task.getCommonizationParameters(sharedNativeCompilation(nativeMain)) + ) + /* + //https://youtrack.jetbrains.com/issue/KT-39324 assertEquals( CInteropCommonizationParameters( SharedCommonizerTarget(CommonizerTarget(IOS_X64, IOS_ARM64), CommonizerTarget(MACOS_X64), CommonizerTarget(LINUX_X64)), setOf(linuxInterop, macosInterop, iosX64Interop, iosArm64Interop) ), task.getCommonizationParameters(sharedNativeCompilation(iosMain)) ) + */ + assertEquals( + CInteropCommonizationParameters(CommonizerTarget(IOS_X64, IOS_ARM64), setOf(iosX64Interop, iosArm64Interop)), + task.getCommonizationParameters(sharedNativeCompilation(iosMain)) + ) + /* + //https://youtrack.jetbrains.com/issue/KT-39324 assertTrue( task.getCommonizationParameters(sharedNativeCompilation(iosMain))!! in task.getCommonizationParameters(sharedNativeCompilation(nativeMain))!!, "Expected CInteropCommonizerTarget of iosMain to be fully contained in nativeMain" ) + */ } private fun sharedNativeCompilation(sourceSet: KotlinSourceSet): KotlinSharedNativeCompilation { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt index a9065f1d237..78ba8dfabb7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget import org.jetbrains.kotlin.descriptors.commonizer.SharedCommonizerTarget +import org.jetbrains.kotlin.descriptors.commonizer.level import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.plugin.CInteropSettings import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -117,6 +118,7 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() { return sharedNativeCompilations.mapNotNull(::getCommonizationParameters).toSet() .run(::removeNotRegisteredInterops) .run(::removeEmptyInterops) + .run(::removeHierarchicalParameters) .run(::removeRedundantParameters) } @@ -173,6 +175,10 @@ private fun removeEmptyInterops(parameters: Set return parameters.filterTo(mutableSetOf()) { it.interops.isNotEmpty() } } +private fun removeHierarchicalParameters(parameters: Set): Set { + return parameters.filterTo(mutableSetOf()) { it.commonizerTarget.level <= 1 } +} + private fun removeRedundantParameters(parameters: Set): Set { return parameters.filterNotTo(mutableSetOf()) { current -> parameters.any { other -> @@ -181,6 +187,7 @@ private fun removeRedundantParameters(parameters: Set