Implement CommonizerTarget isAncestorOf and isDescendentOf
This commit is contained in:
+2
-6
@@ -10,10 +10,7 @@ import org.gradle.api.file.FileCollection
|
|||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.workers.WorkParameters
|
import org.gradle.workers.WorkParameters
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
import org.jetbrains.kotlin.commonizer.*
|
||||||
import org.jetbrains.kotlin.commonizer.NativeDistributionCommonizerOutputLayout
|
|
||||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
|
||||||
import org.jetbrains.kotlin.commonizer.level
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
@@ -210,8 +207,7 @@ private fun removeRedundantParameters(parameters: Set<CInteropCommonizationParam
|
|||||||
|
|
||||||
private operator fun CommonizerTarget.contains(other: CommonizerTarget): Boolean {
|
private operator fun CommonizerTarget.contains(other: CommonizerTarget): Boolean {
|
||||||
if (this == other) return true
|
if (this == other) return true
|
||||||
if (this !is SharedCommonizerTarget) return false
|
return this.isAncestorOf(other)
|
||||||
return targets.any { child -> other in child }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun SharedCommonizerTarget.withAllTransitiveTargets(): Set<CommonizerTarget> {
|
private fun SharedCommonizerTarget.withAllTransitiveTargets(): Set<CommonizerTarget> {
|
||||||
|
|||||||
@@ -100,3 +100,15 @@ public val CommonizerTarget.level: Int
|
|||||||
is SharedCommonizerTarget -> if (targets.isNotEmpty()) targets.maxOf { it.level } + 1 else 0
|
is SharedCommonizerTarget -> if (targets.isNotEmpty()) targets.maxOf { it.level } + 1 else 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public infix fun CommonizerTarget.isAncestorOf(other: CommonizerTarget): Boolean {
|
||||||
|
if (this is SharedCommonizerTarget) {
|
||||||
|
return targets.any { it == other } || targets.any { it.isAncestorOf(other) }
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
public infix fun CommonizerTarget.isDescendentOf(other: CommonizerTarget): Boolean {
|
||||||
|
return other.isAncestorOf(this)
|
||||||
|
}
|
||||||
|
|||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.commonizer
|
||||||
|
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertFalse
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class CommonizerTargetUtilsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `isAncestorOf isDescendentOf`() {
|
||||||
|
val child = LeafCommonizerTarget("a")
|
||||||
|
val parent = SharedCommonizerTarget(LeafCommonizerTarget("a"))
|
||||||
|
|
||||||
|
assertTrue(child isDescendentOf parent, "Expected child isDescendent of parent")
|
||||||
|
assertTrue(parent isAncestorOf child, "Expected parent isAncestor of child")
|
||||||
|
assertFalse(child isDescendentOf child, "Expected same target not being descendent of itself")
|
||||||
|
assertFalse(parent isDescendentOf parent, "Expected same target not being descendent of itself")
|
||||||
|
assertFalse(LeafCommonizerTarget("b") isDescendentOf parent, "Expected orphan target not being descendent of parent")
|
||||||
|
|
||||||
|
val hierarchicalParent = SharedCommonizerTarget(parent, parseCommonizerTarget("((c, d), e)"))
|
||||||
|
assertTrue(child isDescendentOf hierarchicalParent, "Expected child being descendent of hierarchical parent")
|
||||||
|
assertTrue(hierarchicalParent isAncestorOf child, "Expected hierarchicalParent being ancestor of child")
|
||||||
|
assertTrue(parseCommonizerTarget("(c, d)") isDescendentOf hierarchicalParent)
|
||||||
|
assertTrue(LeafCommonizerTarget("e") isDescendentOf hierarchicalParent)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user