[Gradle][MPP] Refine naming for KotlinTargetHierarchyBuilder

^KT-53570 Verification Pending
This commit is contained in:
sebastian.sellmair
2022-10-10 20:36:10 +02:00
committed by Space Team
parent 1a519a8159
commit c332c928fc
4 changed files with 61 additions and 60 deletions
@@ -1029,6 +1029,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetE
} }
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder { public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
public abstract fun addCompilations (Lkotlin/jvm/functions/Function1;)V
public abstract fun android ()V public abstract fun android ()V
public abstract fun androidNativeArm32 ()V public abstract fun androidNativeArm32 ()V
public abstract fun androidNativeArm64 ()V public abstract fun androidNativeArm64 ()V
@@ -1045,9 +1046,8 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH
public abstract fun anyTvos ()V public abstract fun anyTvos ()V
public abstract fun anyWatchos ()V public abstract fun anyWatchos ()V
public abstract fun common (Lkotlin/jvm/functions/Function1;)V public abstract fun common (Lkotlin/jvm/functions/Function1;)V
public abstract fun excludeCompilation (Lkotlin/jvm/functions/Function1;)V public abstract fun filterCompilations (Lkotlin/jvm/functions/Function1;)V
public abstract fun group (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public abstract fun group (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
public abstract fun includeCompilation (Lkotlin/jvm/functions/Function1;)V
public abstract fun iosArm32 ()V public abstract fun iosArm32 ()V
public abstract fun iosArm64 ()V public abstract fun iosArm64 ()V
public abstract fun iosSimulatorArm64 ()V public abstract fun iosSimulatorArm64 ()V
@@ -1062,6 +1062,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH
public abstract fun macosX64 ()V public abstract fun macosX64 ()V
public abstract fun mingwX64 ()V public abstract fun mingwX64 ()V
public abstract fun mingwX86 ()V public abstract fun mingwX86 ()V
public abstract fun removeCompilations (Lkotlin/jvm/functions/Function1;)V
public abstract fun tvosArm64 ()V public abstract fun tvosArm64 ()V
public abstract fun tvosSimulatorArm64 ()V public abstract fun tvosSimulatorArm64 ()V
public abstract fun tvosX64 ()V public abstract fun tvosX64 ()V
@@ -1076,6 +1077,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$DefaultImpls { public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$DefaultImpls {
public static fun common (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V public static fun common (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V
public static fun filterCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun group$default (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static synthetic fun group$default (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
} }
@@ -12,11 +12,10 @@ interface KotlinTargetHierarchyBuilder {
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {}) fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
/* low-level APIs */ /* low-level APIs */
fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) fun addCompilations(predicate: (KotlinCompilation<*>) -> Boolean)
fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) fun removeCompilations(predicate: (KotlinCompilation<*>) -> Boolean)
fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) =
excludeCompilationIf { !predicate(it) } removeCompilations { !predicate(it) }
/* Convenient groups */ /* Convenient groups */
fun anyNative() fun anyNative()
@@ -35,7 +35,7 @@ private class KotlinTargetHierarchyBuilderImplContext(private val compilation: K
fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy? { fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy? {
return builtValues.getOrPut(node) { return builtValues.getOrPut(node) {
val builder = getOrCreateBuilder(node) val builder = getOrCreateBuilder(node)
if (!builder.includes(compilation)) return@getOrPut null if (compilation !in builder) return@getOrPut null
/* /*
Keep the hierarchy 'deduplicated'. Keep the hierarchy 'deduplicated'.
@@ -66,21 +66,21 @@ private class KotlinTargetHierarchyBuilderImpl(
private var includePredicate: ((KotlinCompilation<*>) -> Boolean) = { false } private var includePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
private var excludePredicate: ((KotlinCompilation<*>) -> Boolean) = { false } private var excludePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
override fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) { override fun addCompilations(predicate: (KotlinCompilation<*>) -> Boolean) {
val previousIncludePredicate = this.includePredicate val previousIncludePredicate = this.includePredicate
val previousExcludePredicate = this.excludePredicate val previousExcludePredicate = this.excludePredicate
this.includePredicate = { previousIncludePredicate(it) || predicate(it) } this.includePredicate = { previousIncludePredicate(it) || predicate(it) }
this.excludePredicate = { previousExcludePredicate(it) && !predicate(it) } this.excludePredicate = { previousExcludePredicate(it) && !predicate(it) }
} }
override fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) { override fun removeCompilations(predicate: (KotlinCompilation<*>) -> Boolean) {
val previousIncludePredicate = this.includePredicate val previousIncludePredicate = this.includePredicate
val previousExcludePredicate = this.excludePredicate val previousExcludePredicate = this.excludePredicate
this.includePredicate = { previousIncludePredicate(it) && !predicate(it) } this.includePredicate = { previousIncludePredicate(it) && !predicate(it) }
this.excludePredicate = { previousExcludePredicate(it) || predicate(it) } this.excludePredicate = { previousExcludePredicate(it) || predicate(it) }
} }
fun includes(compilation: KotlinCompilation<*>): Boolean { operator fun contains(compilation: KotlinCompilation<*>): Boolean {
/* Return eagerly, when compilation is explicitly excluded */ /* Return eagerly, when compilation is explicitly excluded */
if (excludePredicate(compilation)) return false if (excludePredicate(compilation)) return false
@@ -88,10 +88,10 @@ private class KotlinTargetHierarchyBuilderImpl(
if (includePredicate(compilation)) return true if (includePredicate(compilation)) return true
/* Find any child that includes this compilation */ /* Find any child that includes this compilation */
return childrenClosure.any { child -> child.includes(compilation) } return childrenClosure.any { child -> compilation in child }
} }
private inline fun includeTargetIf(crossinline predicate: (KotlinTarget) -> Boolean) = includeCompilationIf { predicate(it.target) } private inline fun addTargets(crossinline predicate: (KotlinTarget) -> Boolean) = addCompilations { predicate(it.target) }
override fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit) { override fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit) {
val node = KotlinTargetHierarchy.Node.Group(name) val node = KotlinTargetHierarchy.Node.Group(name)
@@ -100,135 +100,135 @@ private class KotlinTargetHierarchyBuilderImpl(
checkCyclicHierarchy() checkCyclicHierarchy()
} }
override fun anyNative() = includeTargetIf { it is KotlinNativeTarget } override fun anyNative() = addTargets { it is KotlinNativeTarget }
override fun anyApple() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily } override fun anyApple() = addTargets { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily }
override fun anyIos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS } override fun anyIos() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS }
override fun anyWatchos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS } override fun anyWatchos() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS }
override fun anyMacos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX } override fun anyMacos() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX }
override fun anyTvos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS } override fun anyTvos() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS }
override fun anyMingw() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW } override fun anyMingw() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW }
override fun anyLinux() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX } override fun anyLinux() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX }
override fun anyAndroidNative() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID } override fun anyAndroidNative() = addTargets { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
override fun anyJs() = includeTargetIf { it is KotlinJsTargetDsl } override fun anyJs() = addTargets { it is KotlinJsTargetDsl }
override fun jvm() = includeTargetIf { it is KotlinJvmTarget } override fun jvm() = addTargets { it is KotlinJvmTarget }
override fun android() = includeTargetIf { it is KotlinAndroidTarget } override fun android() = addTargets { it is KotlinAndroidTarget }
override fun androidNativeX64() = includeTargetIf { override fun androidNativeX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64
} }
override fun androidNativeX86() = includeTargetIf { override fun androidNativeX86() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86 it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
} }
override fun androidNativeArm32() = includeTargetIf { override fun androidNativeArm32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86 it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
} }
override fun androidNativeArm64() = includeTargetIf { override fun androidNativeArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64
} }
override fun iosArm32() = includeTargetIf { override fun iosArm32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32 it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32
} }
override fun iosArm64() = includeTargetIf { override fun iosArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64
} }
override fun iosX64() = includeTargetIf { override fun iosX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64
} }
override fun iosSimulatorArm64() = includeTargetIf { override fun iosSimulatorArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64
} }
override fun watchosArm32() = includeTargetIf { override fun watchosArm32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32
} }
override fun watchosArm64() = includeTargetIf { override fun watchosArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64
} }
override fun watchosX86() = includeTargetIf { override fun watchosX86() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86
} }
override fun watchosX64() = includeTargetIf { override fun watchosX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64
} }
override fun watchosSimulatorArm64() = includeTargetIf { override fun watchosSimulatorArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64
} }
override fun watchosDeviceArm64() = includeTargetIf { override fun watchosDeviceArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64
} }
override fun tvosArm64() = includeTargetIf { override fun tvosArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64
} }
override fun tvosX64() = includeTargetIf { override fun tvosX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64
} }
override fun tvosSimulatorArm64() = includeTargetIf { override fun tvosSimulatorArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64
} }
override fun linuxX64() = includeTargetIf { override fun linuxX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64
} }
override fun mingwX86() = includeTargetIf { override fun mingwX86() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86 it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86
} }
override fun mingwX64() = includeTargetIf { override fun mingwX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64
} }
override fun macosX64() = includeTargetIf { override fun macosX64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64
} }
override fun macosArm64() = includeTargetIf { override fun macosArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64
} }
override fun linuxArm64() = includeTargetIf { override fun linuxArm64() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64 it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64
} }
override fun linuxArm32Hfp() = includeTargetIf { override fun linuxArm32Hfp() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP
} }
override fun linuxMips32() = includeTargetIf { override fun linuxMips32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32 it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32
} }
override fun linuxMipsel32() = includeTargetIf { override fun linuxMipsel32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32 it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32
} }
override fun wasm32() = includeTargetIf { override fun wasm32() = addTargets {
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32 it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32
} }
@@ -25,8 +25,8 @@ class KotlinTargetHierarchyDescriptorTest {
fun `test - simple descriptor`() { fun `test - simple descriptor`() {
val descriptor = KotlinTargetHierarchyDescriptor { val descriptor = KotlinTargetHierarchyDescriptor {
common { common {
group("groupA") { includeCompilationIf { it.target.name == "a" } } group("groupA") { addCompilations { it.target.name == "a" } }
group("groupB") { includeCompilationIf { it.target.name == "b" } } group("groupB") { addCompilations { it.target.name == "b" } }
} }
} }
@@ -63,7 +63,7 @@ class KotlinTargetHierarchyDescriptorTest {
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend { val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
group("base") { group("base") {
group("extension") { group("extension") {
includeCompilationIf { true } addCompilations { true }
} }
} }
} }
@@ -85,7 +85,7 @@ class KotlinTargetHierarchyDescriptorTest {
group("newRoot") { group("newRoot") {
group("base") { group("base") {
group("extension") { group("extension") {
includeCompilationIf { true } addCompilations { true }
} }
} }
} }
@@ -111,7 +111,7 @@ class KotlinTargetHierarchyDescriptorTest {
group("newRoot1") { group("newRoot1") {
group("base") { group("base") {
group("extension1") { group("extension1") {
includeCompilationIf { true } addCompilations { true }
} }
} }
} }
@@ -120,7 +120,7 @@ class KotlinTargetHierarchyDescriptorTest {
group("newRoot2") { group("newRoot2") {
group("base") { group("base") {
group("extension2") { group("extension2") {
includeCompilationIf { true } addCompilations { true }
} }
} }
} }
@@ -196,7 +196,7 @@ class KotlinTargetHierarchyDescriptorTest {
filterCompilations { it.name in setOf("a", "b") } filterCompilations { it.name in setOf("a", "b") }
common { common {
group("x") { group("x") {
includeCompilationIf { true } addCompilations { true }
} }
} }
} }
@@ -223,7 +223,7 @@ class KotlinTargetHierarchyDescriptorTest {
@Test @Test
fun `test - filterCompilations - include them again`() { fun `test - filterCompilations - include them again`() {
val descriptor = KotlinTargetHierarchyDescriptor { val descriptor = KotlinTargetHierarchyDescriptor {
includeCompilationIf { true } addCompilations { true }
filterCompilations { it.name == "a" } filterCompilations { it.name == "a" }
} }
@@ -231,7 +231,7 @@ class KotlinTargetHierarchyDescriptorTest {
assertNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.maybeCreate("b"))) assertNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.maybeCreate("b")))
val extended = descriptor.extend { val extended = descriptor.extend {
includeCompilationIf { true } // <- adds all compilations back again! addCompilations { true } // <- adds all compilations back again!
} }
assertNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.maybeCreate("b"))) assertNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.maybeCreate("b")))