diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index 801732d9279..fc0b19d2b71 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -1079,7 +1079,7 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$Modu public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder { public abstract fun common (Lkotlin/jvm/functions/Function1;)V - public abstract fun excludeCompilations (Lkotlin/jvm/functions/Function2;)V + public abstract fun excludeCompilations (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 withAndroid ()V @@ -1089,7 +1089,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH public abstract fun withAndroidNativeX64 ()V public abstract fun withAndroidNativeX86 ()V public abstract fun withApple ()V - public abstract fun withCompilations (Lkotlin/jvm/functions/Function2;)V + public abstract fun withCompilations (Lkotlin/jvm/functions/Function1;)V public abstract fun withIos ()V public abstract fun withIosArm32 ()V public abstract fun withIosArm64 ()V @@ -1123,14 +1123,14 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH public abstract fun withWatchosSimulatorArm64 ()V public abstract fun withWatchosX64 ()V public abstract fun withWatchosX86 ()V - public abstract fun withoutCompilations (Lkotlin/jvm/functions/Function2;)V + public abstract fun withoutCompilations (Lkotlin/jvm/functions/Function1;)V } 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 - public static fun withoutCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function2;)V + public static fun withoutCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;Lkotlin/jvm/functions/Function1;)V } public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root : org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder { @@ -1142,7 +1142,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetH public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root$DefaultImpls { public static fun common (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root;Lkotlin/jvm/functions/Function1;)V public static fun filterCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root;Lkotlin/jvm/functions/Function1;)V - public static fun withoutCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root;Lkotlin/jvm/functions/Function2;)V + public static fun withoutCompilations (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root;Lkotlin/jvm/functions/Function1;)V } public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor { 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 dc43fc29b69..bec6a0612e1 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 @@ -20,12 +20,12 @@ interface KotlinTargetHierarchyBuilder { fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {}) /* low-level APIs */ - fun withCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) + fun withCompilations(predicate: (KotlinCompilation<*>) -> Boolean) - fun excludeCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) + fun excludeCompilations(predicate: (KotlinCompilation<*>) -> Boolean) @Deprecated("Use 'excludeCompilations' instead", ReplaceWith("excludeCompilations(predicate)")) - fun withoutCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) = excludeCompilations(predicate) + fun withoutCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = excludeCompilations(predicate) @Deprecated("Use plain 'withoutCompilations(!predicate) instead'", ReplaceWith("withoutCompilations { !predicate(it) }")) fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = excludeCompilations { !predicate(it) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyBuilderImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyBuilderImpl.kt index a72862b67eb..ea94b6c4f33 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyBuilderImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyBuilderImpl.kt @@ -56,35 +56,26 @@ private class KotlinTargetHierarchyBuilderImplContext(private val compilation: K } private class KotlinTargetHierarchyBuilderRootImpl( - private val builder: KotlinTargetHierarchyBuilder + private val builder: KotlinTargetHierarchyBuilderImpl ) : KotlinTargetHierarchyBuilder.Root, KotlinTargetHierarchyBuilder by builder { - private var modules: Set? = null override fun modules(vararg module: KotlinTargetHierarchy.ModuleName) { - this.modules = module.toHashSet() + builder.modules = module.toHashSet() } override fun withModule(vararg module: KotlinTargetHierarchy.ModuleName) { - this.modules = this.modules.orEmpty().plus(module) + builder.modules = builder.modules.orEmpty().plus(module) } override fun excludeModule(vararg module: KotlinTargetHierarchy.ModuleName) { val modules = module.toHashSet() if (modules.isEmpty()) return - if (this.modules == null) return - this.modules = this.modules.orEmpty() - modules - } - - init { - builder.excludeCompilations exclude@{ compilation -> - val modules = this.modules ?: return@exclude false - val module = KotlinTargetHierarchy.ModuleName.orNull(compilation) ?: return@exclude false - module !in modules - } + builder.modules = builder.modules.orEmpty() - modules } } + private class KotlinTargetHierarchyBuilderImpl( val context: KotlinTargetHierarchyBuilderImplContext, val node: KotlinTargetHierarchyTree.Node, @@ -93,17 +84,19 @@ private class KotlinTargetHierarchyBuilderImpl( val children = mutableSetOf() val childrenClosure get() = closure { it.children } - private var includePredicate: (suspend (KotlinCompilation<*>) -> Boolean) = { false } - private var excludePredicate: (suspend (KotlinCompilation<*>) -> Boolean) = { false } + var modules: Set? = null + private var includePredicate: ((KotlinCompilation<*>) -> Boolean) = { false } + private var excludePredicate: ((KotlinCompilation<*>) -> Boolean) = { false } - override fun withCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) { + + override fun withCompilations(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 excludeCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) { + override fun excludeCompilations(predicate: (KotlinCompilation<*>) -> Boolean) { val previousIncludePredicate = this.includePredicate val previousExcludePredicate = this.excludePredicate this.includePredicate = { previousIncludePredicate(it) && !predicate(it) } @@ -111,6 +104,11 @@ private class KotlinTargetHierarchyBuilderImpl( } suspend fun contains(compilation: KotlinCompilation<*>): Boolean { + modules?.let { modules -> + val module = KotlinTargetHierarchy.ModuleName.orNull(compilation) ?: return false + if (module !in modules) return false + } + /* Return eagerly, when compilation is explicitly excluded */ if (excludePredicate(compilation)) return false