diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt index 46dd0cb9d58..feb9558d4fa 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt @@ -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 fun addCompilations (Lkotlin/jvm/functions/Function1;)V public abstract fun android ()V public abstract fun androidNativeArm32 ()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 anyWatchos ()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 includeCompilation (Lkotlin/jvm/functions/Function1;)V public abstract fun iosArm32 ()V public abstract fun iosArm64 ()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 mingwX64 ()V public abstract fun mingwX86 ()V + public abstract fun removeCompilations (Lkotlin/jvm/functions/Function1;)V public abstract fun tvosArm64 ()V public abstract fun tvosSimulatorArm64 ()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 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 } diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt index 3b2461570ac..45585008376 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder.kt @@ -12,11 +12,10 @@ interface KotlinTargetHierarchyBuilder { fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {}) /* low-level APIs */ - fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) - fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) - + fun addCompilations(predicate: (KotlinCompilation<*>) -> Boolean) + fun removeCompilations(predicate: (KotlinCompilation<*>) -> Boolean) fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = - excludeCompilationIf { !predicate(it) } + removeCompilations { !predicate(it) } /* Convenient groups */ fun anyNative() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt index bd721fd4608..d6662c3a19e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/buildKotlinTargetHierarchy.kt @@ -35,7 +35,7 @@ private class KotlinTargetHierarchyBuilderImplContext(private val compilation: K fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy? { return builtValues.getOrPut(node) { val builder = getOrCreateBuilder(node) - if (!builder.includes(compilation)) return@getOrPut null + if (compilation !in builder) return@getOrPut null /* Keep the hierarchy 'deduplicated'. @@ -66,21 +66,21 @@ private class KotlinTargetHierarchyBuilderImpl( private var includePredicate: ((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 previousExcludePredicate = this.excludePredicate this.includePredicate = { previousIncludePredicate(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 previousExcludePredicate = this.excludePredicate this.includePredicate = { previousIncludePredicate(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 */ if (excludePredicate(compilation)) return false @@ -88,10 +88,10 @@ private class KotlinTargetHierarchyBuilderImpl( if (includePredicate(compilation)) return true /* 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) { val node = KotlinTargetHierarchy.Node.Group(name) @@ -100,135 +100,135 @@ private class KotlinTargetHierarchyBuilderImpl( 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 } - override fun androidNativeX86() = includeTargetIf { + override fun androidNativeX86() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86 } - override fun androidNativeArm32() = includeTargetIf { + override fun androidNativeArm32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86 } - override fun androidNativeArm64() = includeTargetIf { + override fun androidNativeArm64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64 } - override fun iosArm32() = includeTargetIf { + override fun iosArm32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32 } - override fun iosArm64() = includeTargetIf { + override fun iosArm64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64 } - override fun iosX64() = includeTargetIf { + override fun iosX64() = addTargets { 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 } - override fun watchosArm32() = includeTargetIf { + override fun watchosArm32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32 } - override fun watchosArm64() = includeTargetIf { + override fun watchosArm64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64 } - override fun watchosX86() = includeTargetIf { + override fun watchosX86() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86 } - override fun watchosX64() = includeTargetIf { + override fun watchosX64() = addTargets { 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 } - override fun watchosDeviceArm64() = includeTargetIf { + override fun watchosDeviceArm64() = addTargets { 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 } - override fun tvosX64() = includeTargetIf { + override fun tvosX64() = addTargets { 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 } - override fun linuxX64() = includeTargetIf { + override fun linuxX64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64 } - override fun mingwX86() = includeTargetIf { + override fun mingwX86() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86 } - override fun mingwX64() = includeTargetIf { + override fun mingwX64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64 } - override fun macosX64() = includeTargetIf { + override fun macosX64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64 } - override fun macosArm64() = includeTargetIf { + override fun macosArm64() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64 } - override fun linuxArm64() = includeTargetIf { + override fun linuxArm64() = addTargets { 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 } - override fun linuxMips32() = includeTargetIf { + override fun linuxMips32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32 } - override fun linuxMipsel32() = includeTargetIf { + override fun linuxMipsel32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32 } - override fun wasm32() = includeTargetIf { + override fun wasm32() = addTargets { it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32 } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinTargetHierarchyDescriptorTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinTargetHierarchyDescriptorTest.kt index aa9e5a2db8d..c758d4342d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinTargetHierarchyDescriptorTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/KotlinTargetHierarchyDescriptorTest.kt @@ -25,8 +25,8 @@ class KotlinTargetHierarchyDescriptorTest { fun `test - simple descriptor`() { val descriptor = KotlinTargetHierarchyDescriptor { common { - group("groupA") { includeCompilationIf { it.target.name == "a" } } - group("groupB") { includeCompilationIf { it.target.name == "b" } } + group("groupA") { addCompilations { it.target.name == "a" } } + group("groupB") { addCompilations { it.target.name == "b" } } } } @@ -63,7 +63,7 @@ class KotlinTargetHierarchyDescriptorTest { val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend { group("base") { group("extension") { - includeCompilationIf { true } + addCompilations { true } } } } @@ -85,7 +85,7 @@ class KotlinTargetHierarchyDescriptorTest { group("newRoot") { group("base") { group("extension") { - includeCompilationIf { true } + addCompilations { true } } } } @@ -111,7 +111,7 @@ class KotlinTargetHierarchyDescriptorTest { group("newRoot1") { group("base") { group("extension1") { - includeCompilationIf { true } + addCompilations { true } } } } @@ -120,7 +120,7 @@ class KotlinTargetHierarchyDescriptorTest { group("newRoot2") { group("base") { group("extension2") { - includeCompilationIf { true } + addCompilations { true } } } } @@ -196,7 +196,7 @@ class KotlinTargetHierarchyDescriptorTest { filterCompilations { it.name in setOf("a", "b") } common { group("x") { - includeCompilationIf { true } + addCompilations { true } } } } @@ -223,7 +223,7 @@ class KotlinTargetHierarchyDescriptorTest { @Test fun `test - filterCompilations - include them again`() { val descriptor = KotlinTargetHierarchyDescriptor { - includeCompilationIf { true } + addCompilations { true } filterCompilations { it.name == "a" } } @@ -231,7 +231,7 @@ class KotlinTargetHierarchyDescriptorTest { assertNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.maybeCreate("b"))) 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")))