Limit CInteropCommonizerTask to only one level of commonization

See ^KT-39324
This commit is contained in:
sebastian.sellmair
2021-03-10 17:11:11 +01:00
committed by Space
parent 261934d881
commit 49cf386258
2 changed files with 23 additions and 1 deletions
@@ -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 {
@@ -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<CInteropCommonizationParameters>
return parameters.filterTo(mutableSetOf()) { it.interops.isNotEmpty() }
}
private fun removeHierarchicalParameters(parameters: Set<CInteropCommonizationParameters>): Set<CInteropCommonizationParameters> {
return parameters.filterTo(mutableSetOf()) { it.commonizerTarget.level <= 1 }
}
private fun removeRedundantParameters(parameters: Set<CInteropCommonizationParameters>): Set<CInteropCommonizationParameters> {
return parameters.filterNotTo(mutableSetOf()) { current ->
parameters.any { other ->
@@ -181,6 +187,7 @@ private fun removeRedundantParameters(parameters: Set<CInteropCommonizationParam
}
}
private operator fun CommonizerTarget.contains(other: CommonizerTarget): Boolean {
if (this == other) return true
if (this !is SharedCommonizerTarget) return false