[Gradle][MPP] KotlinTargetHierarchyBuilderImpl: only build child groups if explicitly included
^KT-53570 Verification Pending
This commit is contained in:
committed by
Space Team
parent
487368d9df
commit
1823e0fad4
+48
-16
@@ -1029,31 +1029,60 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetE
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
|
||||
public abstract fun android ()V
|
||||
public abstract fun androidNativeArm32 ()V
|
||||
public abstract fun androidNativeArm64 ()V
|
||||
public abstract fun androidNativeX64 ()V
|
||||
public abstract fun androidNativeX86 ()V
|
||||
public abstract fun anyAndroidNative ()V
|
||||
public abstract fun anyApple ()V
|
||||
public abstract fun anyIos ()V
|
||||
public abstract fun anyJs ()V
|
||||
public abstract fun anyLinux ()V
|
||||
public abstract fun anyMacos ()V
|
||||
public abstract fun anyMingw ()V
|
||||
public abstract fun anyNative ()V
|
||||
public abstract fun anyTvos ()V
|
||||
public abstract fun anyWatchos ()V
|
||||
public abstract fun common (Lkotlin/jvm/functions/Function1;)V
|
||||
public abstract fun getCompilation ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinCompilation;
|
||||
public abstract fun getTarget ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTarget;
|
||||
public abstract fun excludeCompilationIf (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 isAndroidJvm ()Z
|
||||
public abstract fun isAndroidNative ()Z
|
||||
public abstract fun isApple ()Z
|
||||
public abstract fun isIos ()Z
|
||||
public abstract fun isJs ()Z
|
||||
public abstract fun isJsLegacy ()Z
|
||||
public abstract fun isJvm ()Z
|
||||
public abstract fun isLinux ()Z
|
||||
public abstract fun isMacos ()Z
|
||||
public abstract fun isNative ()Z
|
||||
public abstract fun isTvos ()Z
|
||||
public abstract fun isWatchos ()Z
|
||||
public abstract fun isWindows ()Z
|
||||
public abstract fun includeCompilationIf (Lkotlin/jvm/functions/Function1;)V
|
||||
public abstract fun iosArm32 ()V
|
||||
public abstract fun iosArm64 ()V
|
||||
public abstract fun iosSimulatorArm64 ()V
|
||||
public abstract fun iosX64 ()V
|
||||
public abstract fun jvm ()V
|
||||
public abstract fun linuxArm32Hfp ()V
|
||||
public abstract fun linuxArm64 ()V
|
||||
public abstract fun linuxMips32 ()V
|
||||
public abstract fun linuxMipsel32 ()V
|
||||
public abstract fun linuxX64 ()V
|
||||
public abstract fun macosArm64 ()V
|
||||
public abstract fun macosX64 ()V
|
||||
public abstract fun mingwX64 ()V
|
||||
public abstract fun mingwX86 ()V
|
||||
public abstract fun tvosArm64 ()V
|
||||
public abstract fun tvosSimulatorArm64 ()V
|
||||
public abstract fun tvosX64 ()V
|
||||
public abstract fun wasm32 ()V
|
||||
public abstract fun watchosArm32 ()V
|
||||
public abstract fun watchosArm64 ()V
|
||||
public abstract fun watchosDeviceArm64 ()V
|
||||
public abstract fun watchosSimulatorArm64 ()V
|
||||
public abstract fun watchosX64 ()V
|
||||
public abstract fun watchosX86 ()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 abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor : kotlin/jvm/functions/Function1 {
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor {
|
||||
public abstract fun describe (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder;)V
|
||||
public abstract fun extend (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor;
|
||||
}
|
||||
|
||||
@@ -1094,6 +1123,9 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargets
|
||||
public abstract fun getPresets ()Lorg/gradle/api/NamedDomainObjectCollection;
|
||||
}
|
||||
|
||||
public abstract interface annotation class org/jetbrains/kotlin/gradle/plugin/KotlinTargetsDsl : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTestRun : org/jetbrains/kotlin/gradle/plugin/KotlinExecution {
|
||||
public abstract fun filter (Lgroovy/lang/Closure;)V
|
||||
public abstract fun filter (Lkotlin/jvm/functions/Function1;)V
|
||||
|
||||
+5
-2
@@ -11,8 +11,11 @@ interface KotlinTargetHierarchyBuilder {
|
||||
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
|
||||
|
||||
/* low-level APIs */
|
||||
fun includeCompilation(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||
fun excludeCompilation(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||
fun includeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||
fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean)
|
||||
|
||||
fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) =
|
||||
excludeCompilationIf { !predicate(it) }
|
||||
|
||||
/* Convenient groups */
|
||||
fun anyNative()
|
||||
|
||||
+4
@@ -7,11 +7,15 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.tooling.core.withClosure
|
||||
|
||||
internal data class KotlinTargetHierarchy(
|
||||
val node: Node, val children: Set<KotlinTargetHierarchy> = emptySet()
|
||||
) {
|
||||
|
||||
val childrenClosure: Set<KotlinTargetHierarchy> =
|
||||
children.withClosure<KotlinTargetHierarchy> { it.children }
|
||||
|
||||
sealed class Node {
|
||||
abstract fun sharedSourceSetName(compilation: KotlinCompilation<*>): String?
|
||||
|
||||
|
||||
+3
-3
@@ -17,8 +17,8 @@ internal fun applyKotlinTargetHierarchy(
|
||||
targets
|
||||
.matching { target -> target.platformType != KotlinPlatformType.common }
|
||||
.all { target ->
|
||||
target.compilations.all { compilation ->
|
||||
val hierarchy = hierarchyDescriptor.buildKotlinTargetHierarchy(compilation)
|
||||
target.compilations.all forCompilation@{ compilation ->
|
||||
val hierarchy = hierarchyDescriptor.buildKotlinTargetHierarchy(compilation) ?: return@forCompilation
|
||||
applyKotlinTargetHierarchy(hierarchy, compilation, sourceSets)
|
||||
}
|
||||
}
|
||||
@@ -52,4 +52,4 @@ private fun createSharedSourceSetOrNull(
|
||||
): KotlinSourceSet? {
|
||||
val sharedSourceSetName = node.sharedSourceSetName(compilation) ?: return null
|
||||
return sourceSets.maybeCreate(sharedSourceSetName)
|
||||
}
|
||||
}
|
||||
|
||||
+163
-167
@@ -18,8 +18,7 @@ import org.jetbrains.kotlin.konan.target.Family
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.tooling.core.closure
|
||||
|
||||
|
||||
internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilation: KotlinCompilation<*>): KotlinTargetHierarchy {
|
||||
internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilation: KotlinCompilation<*>): KotlinTargetHierarchy? {
|
||||
val context = KotlinTargetHierarchyBuilderImplContext(compilation)
|
||||
describe(context.getOrCreateBuilder(KotlinTargetHierarchy.Node.Root))
|
||||
return context.build(KotlinTargetHierarchy.Node.Root)
|
||||
@@ -27,15 +26,16 @@ internal fun KotlinTargetHierarchyDescriptor.buildKotlinTargetHierarchy(compilat
|
||||
|
||||
private class KotlinTargetHierarchyBuilderImplContext(private val compilation: KotlinCompilation<*>) {
|
||||
private val builders = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchyBuilderImpl>()
|
||||
private val builtValues = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchy>()
|
||||
private val builtValues = hashMapOf<KotlinTargetHierarchy.Node, KotlinTargetHierarchy?>()
|
||||
|
||||
fun getOrCreateBuilder(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchyBuilderImpl = builders.getOrPut(node) {
|
||||
KotlinTargetHierarchyBuilderImpl(this, node)
|
||||
}
|
||||
|
||||
fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy {
|
||||
fun build(node: KotlinTargetHierarchy.Node): KotlinTargetHierarchy? {
|
||||
return builtValues.getOrPut(node) {
|
||||
val builder = getOrCreateBuilder(node)
|
||||
if (!builder.includes(compilation)) return@getOrPut null
|
||||
|
||||
/*
|
||||
Keep the hierarchy 'deduplicated'.
|
||||
@@ -45,22 +45,12 @@ private class KotlinTargetHierarchyBuilderImplContext(private val compilation: K
|
||||
1) a -> b -> c
|
||||
2) b -> c
|
||||
|
||||
then we can remove the duplicated 'sub hierarchy' 2) and only return
|
||||
a -> b -> c
|
||||
|
||||
*/
|
||||
val childrenNodes = builder.children.map { it.node } -
|
||||
builder.children.flatMap { child -> child.childrenClosure }.map { it.node }.toSet()
|
||||
|
||||
/*
|
||||
Respect include & exclude predicates!
|
||||
*/
|
||||
val applicableChildrenNodes = childrenNodes.filter { node ->
|
||||
val childrenBuilder = getOrCreateBuilder(node)
|
||||
childrenBuilder.predicate?.invoke(compilation) ?: true
|
||||
}
|
||||
|
||||
KotlinTargetHierarchy(node, applicableChildrenNodes.map(this::build).toSet())
|
||||
then we can remove the duplicated 'sub hierarchy' 2) and only return 1) a -> b -> c
|
||||
(Remove children that are also reachable by more specific paths)
|
||||
*/
|
||||
val children = builder.children.mapNotNull { child -> build(child.node) }
|
||||
val directChildren = children.toSet() - children.flatMap { child -> child.childrenClosure }.toSet()
|
||||
KotlinTargetHierarchy(node, directChildren)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -73,169 +63,175 @@ private class KotlinTargetHierarchyBuilderImpl(
|
||||
val children = mutableSetOf<KotlinTargetHierarchyBuilderImpl>()
|
||||
val childrenClosure get() = closure { it.children }
|
||||
|
||||
var predicate: ((KotlinCompilation<*>) -> Boolean)? = null
|
||||
private var includePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
|
||||
private var excludePredicate: ((KotlinCompilation<*>) -> Boolean) = { false }
|
||||
|
||||
override fun includeCompilation(predicate: (KotlinCompilation<*>) -> Boolean) {
|
||||
val previousPredicate = this.predicate
|
||||
if (previousPredicate == null) {
|
||||
this.predicate = predicate
|
||||
return
|
||||
}
|
||||
|
||||
this.predicate = { previousPredicate(it) || predicate(it) }
|
||||
override fun includeCompilationIf(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 excludeCompilation(predicate: (KotlinCompilation<*>) -> Boolean) {
|
||||
val previousPredicate = this.predicate
|
||||
if (previousPredicate == null) {
|
||||
this.predicate = { !predicate(it) }
|
||||
return
|
||||
}
|
||||
this.predicate = { previousPredicate(it) && !predicate(it) }
|
||||
override fun excludeCompilationIf(predicate: (KotlinCompilation<*>) -> Boolean) {
|
||||
val previousIncludePredicate = this.includePredicate
|
||||
val previousExcludePredicate = this.excludePredicate
|
||||
this.includePredicate = { previousIncludePredicate(it) && !predicate(it) }
|
||||
this.excludePredicate = { previousExcludePredicate(it) || predicate(it) }
|
||||
}
|
||||
|
||||
private inline fun includeTarget(crossinline predicate: (KotlinTarget) -> Boolean) = includeCompilation { predicate(it.target) }
|
||||
fun includes(compilation: KotlinCompilation<*>): Boolean {
|
||||
/* Return eagerly, when compilation is explicitly excluded */
|
||||
if (excludePredicate(compilation)) return false
|
||||
|
||||
override fun anyNative() = includeTarget { it is KotlinNativeTarget }
|
||||
/* Return eagerly, when compilation is explicitly included */
|
||||
if (includePredicate(compilation)) return true
|
||||
|
||||
override fun anyApple() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily }
|
||||
|
||||
override fun anyIos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS }
|
||||
|
||||
override fun anyWatchos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS }
|
||||
|
||||
override fun anyMacos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX }
|
||||
|
||||
override fun anyTvos() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS }
|
||||
|
||||
override fun anyMingw() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW }
|
||||
|
||||
override fun anyLinux() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX }
|
||||
|
||||
override fun anyAndroidNative() = includeTarget { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
|
||||
|
||||
override fun anyJs() = includeTarget { it is KotlinJsTargetDsl }
|
||||
|
||||
override fun jvm() = includeTarget { it is KotlinJvmTarget }
|
||||
|
||||
override fun android() = includeTarget { it is KotlinAndroidTarget }
|
||||
|
||||
override fun androidNativeX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64
|
||||
/* Find any child that includes this compilation */
|
||||
return childrenClosure.any { child -> child.includes(compilation) }
|
||||
}
|
||||
|
||||
override fun androidNativeX86() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||
}
|
||||
|
||||
override fun androidNativeArm32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||
}
|
||||
|
||||
override fun androidNativeArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64
|
||||
}
|
||||
|
||||
override fun iosArm32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32
|
||||
}
|
||||
|
||||
override fun iosArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64
|
||||
}
|
||||
|
||||
override fun iosX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64
|
||||
}
|
||||
|
||||
override fun iosSimulatorArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun watchosArm32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32
|
||||
}
|
||||
|
||||
override fun watchosArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64
|
||||
}
|
||||
|
||||
override fun watchosX86() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86
|
||||
}
|
||||
|
||||
override fun watchosX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64
|
||||
}
|
||||
|
||||
override fun watchosSimulatorArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun watchosDeviceArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64
|
||||
}
|
||||
|
||||
override fun tvosArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64
|
||||
}
|
||||
|
||||
override fun tvosX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64
|
||||
}
|
||||
|
||||
override fun tvosSimulatorArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun linuxX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64
|
||||
}
|
||||
|
||||
override fun mingwX86() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86
|
||||
}
|
||||
|
||||
override fun mingwX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64
|
||||
}
|
||||
|
||||
override fun macosX64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64
|
||||
}
|
||||
|
||||
override fun macosArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64
|
||||
}
|
||||
|
||||
override fun linuxArm64() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64
|
||||
}
|
||||
|
||||
override fun linuxArm32Hfp() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP
|
||||
}
|
||||
|
||||
override fun linuxMips32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32
|
||||
}
|
||||
|
||||
override fun linuxMipsel32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32
|
||||
}
|
||||
|
||||
override fun wasm32() = includeTarget {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32
|
||||
}
|
||||
private inline fun includeTargetIf(crossinline predicate: (KotlinTarget) -> Boolean) = includeCompilationIf { predicate(it.target) }
|
||||
|
||||
override fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit) {
|
||||
val node = KotlinTargetHierarchy.Node.Group(name)
|
||||
val child = context.getOrCreateBuilder(node)
|
||||
val child = context.getOrCreateBuilder(node).also(build)
|
||||
children.add(child)
|
||||
child.build()
|
||||
checkCyclicHierarchy()
|
||||
}
|
||||
|
||||
override fun anyNative() = includeTargetIf { it is KotlinNativeTarget }
|
||||
|
||||
override fun anyApple() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family.isAppleFamily }
|
||||
|
||||
override fun anyIos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.IOS }
|
||||
|
||||
override fun anyWatchos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.WATCHOS }
|
||||
|
||||
override fun anyMacos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.OSX }
|
||||
|
||||
override fun anyTvos() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.TVOS }
|
||||
|
||||
override fun anyMingw() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.MINGW }
|
||||
|
||||
override fun anyLinux() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.LINUX }
|
||||
|
||||
override fun anyAndroidNative() = includeTargetIf { it is KotlinNativeTarget && it.konanTarget.family == Family.ANDROID }
|
||||
|
||||
override fun anyJs() = includeTargetIf { it is KotlinJsTargetDsl }
|
||||
|
||||
override fun jvm() = includeTargetIf { it is KotlinJvmTarget }
|
||||
|
||||
override fun android() = includeTargetIf { it is KotlinAndroidTarget }
|
||||
|
||||
override fun androidNativeX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X64
|
||||
}
|
||||
|
||||
override fun androidNativeX86() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||
}
|
||||
|
||||
override fun androidNativeArm32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_X86
|
||||
}
|
||||
|
||||
override fun androidNativeArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.ANDROID_ARM64
|
||||
}
|
||||
|
||||
override fun iosArm32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM32
|
||||
}
|
||||
|
||||
override fun iosArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_ARM64
|
||||
}
|
||||
|
||||
override fun iosX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_X64
|
||||
}
|
||||
|
||||
override fun iosSimulatorArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.IOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun watchosArm32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM32
|
||||
}
|
||||
|
||||
override fun watchosArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_ARM64
|
||||
}
|
||||
|
||||
override fun watchosX86() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X86
|
||||
}
|
||||
|
||||
override fun watchosX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_X64
|
||||
}
|
||||
|
||||
override fun watchosSimulatorArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun watchosDeviceArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WATCHOS_DEVICE_ARM64
|
||||
}
|
||||
|
||||
override fun tvosArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_ARM64
|
||||
}
|
||||
|
||||
override fun tvosX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_X64
|
||||
}
|
||||
|
||||
override fun tvosSimulatorArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.TVOS_SIMULATOR_ARM64
|
||||
}
|
||||
|
||||
override fun linuxX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_X64
|
||||
}
|
||||
|
||||
override fun mingwX86() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X86
|
||||
}
|
||||
|
||||
override fun mingwX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MINGW_X64
|
||||
}
|
||||
|
||||
override fun macosX64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_X64
|
||||
}
|
||||
|
||||
override fun macosArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.MACOS_ARM64
|
||||
}
|
||||
|
||||
override fun linuxArm64() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM64
|
||||
}
|
||||
|
||||
override fun linuxArm32Hfp() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_ARM32_HFP
|
||||
}
|
||||
|
||||
override fun linuxMips32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPS32
|
||||
}
|
||||
|
||||
override fun linuxMipsel32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.LINUX_MIPSEL32
|
||||
}
|
||||
|
||||
override fun wasm32() = includeTargetIf {
|
||||
it is KotlinNativeTarget && it.konanTarget == KonanTarget.WASM32
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "KotlinTargetHierarchyBuilder($node)"
|
||||
}
|
||||
|
||||
+3
-2
@@ -10,11 +10,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
||||
|
||||
internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor {
|
||||
/* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */
|
||||
filterCompilations { compilation -> compilation.isMain() || compilation.isTest() }
|
||||
|
||||
common {
|
||||
group("native") {
|
||||
anyNative()
|
||||
/* natural hierarchy is only defined for main and test default compilations, by default */
|
||||
excludeCompilation { compilation -> !(compilation.isMain() || compilation.isTest()) }
|
||||
|
||||
group("apple") {
|
||||
anyApple()
|
||||
|
||||
+19
-13
@@ -14,9 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinTargetHierar
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinTargetHierarchy.Node
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.buildKotlinTargetHierarchy
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertSame
|
||||
import kotlin.test.*
|
||||
|
||||
class KotlinTargetHierarchyDescriptorTest {
|
||||
|
||||
@@ -27,8 +25,8 @@ class KotlinTargetHierarchyDescriptorTest {
|
||||
fun `test - simple descriptor`() {
|
||||
val descriptor = KotlinTargetHierarchyDescriptor {
|
||||
common {
|
||||
group("groupA") { includeCompilation { it.target.name == "a" } }
|
||||
group("groupB") { includeCompilation { it.target.name == "b" } }
|
||||
group("groupA") { includeCompilationIf { it.target.name == "a" } }
|
||||
group("groupB") { includeCompilationIf { it.target.name == "b" } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,8 +52,8 @@ class KotlinTargetHierarchyDescriptorTest {
|
||||
descriptor.buildKotlinTargetHierarchy(targetB.compilations.main)
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
hierarchy { group("common") },
|
||||
/* targetC is not mentioned in hierarchy description */
|
||||
assertNull(
|
||||
descriptor.buildKotlinTargetHierarchy(targetC.compilations.main)
|
||||
)
|
||||
}
|
||||
@@ -64,7 +62,9 @@ class KotlinTargetHierarchyDescriptorTest {
|
||||
fun `test - extend`() {
|
||||
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
||||
group("base") {
|
||||
group("extension")
|
||||
group("extension") {
|
||||
includeCompilationIf { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,9 @@ class KotlinTargetHierarchyDescriptorTest {
|
||||
val descriptor = KotlinTargetHierarchyDescriptor { group("base") }.extend {
|
||||
group("newRoot") {
|
||||
group("base") {
|
||||
group("extension")
|
||||
group("extension") {
|
||||
includeCompilationIf { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,19 +110,23 @@ class KotlinTargetHierarchyDescriptorTest {
|
||||
.extend {
|
||||
group("newRoot1") {
|
||||
group("base") {
|
||||
group("extension1")
|
||||
group("extension1") {
|
||||
includeCompilationIf { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.extend {
|
||||
group("newRoot2") {
|
||||
group("base") {
|
||||
group("extension2")
|
||||
group("extension2") {
|
||||
includeCompilationIf { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val hierarchy = descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.main)
|
||||
val hierarchy = assertNotNull(descriptor.buildKotlinTargetHierarchy(kotlin.linuxX64().compilations.main))
|
||||
|
||||
assertEquals(
|
||||
hierarchy {
|
||||
@@ -197,4 +203,4 @@ private class TestHierarchyBuilder(private val node: Node) {
|
||||
|
||||
private fun hierarchy(build: TestHierarchyBuilder.() -> Unit): KotlinTargetHierarchy {
|
||||
return TestHierarchyBuilder(Node.Root).also(build).build()
|
||||
}
|
||||
}
|
||||
|
||||
+12
-3
@@ -186,7 +186,13 @@ class KotlinTargetHierarchyDslTest {
|
||||
}
|
||||
|
||||
kotlin.apply {
|
||||
targetHierarchy.apply(descriptor) { group("base") { group("extension") } }
|
||||
targetHierarchy.apply(descriptor) {
|
||||
group("base") {
|
||||
group("extension") {
|
||||
linuxX64()
|
||||
}
|
||||
}
|
||||
}
|
||||
linuxX64()
|
||||
}
|
||||
|
||||
@@ -207,7 +213,6 @@ class KotlinTargetHierarchyDslTest {
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun `test - hierarchy set - extend - with new root`() {
|
||||
val descriptor = KotlinTargetHierarchyDescriptor {
|
||||
@@ -219,7 +224,11 @@ class KotlinTargetHierarchyDslTest {
|
||||
kotlin.apply {
|
||||
targetHierarchy.apply(descriptor) {
|
||||
group("newRoot") {
|
||||
group("base") { group("extension") }
|
||||
group("base") {
|
||||
group("extension") {
|
||||
linuxX64()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
linuxX64()
|
||||
|
||||
Reference in New Issue
Block a user