diff --git a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt index 755041d5b17..2bcf82aad20 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt @@ -111,6 +111,10 @@ public fun CommonizerTarget.withAllAncestors(): Set { } } +public fun CommonizerTarget.allLeaves(): Set { + return withAllAncestors().filterIsInstance().toSet() +} + public infix fun CommonizerTarget.isAncestorOf(other: CommonizerTarget): Boolean { if (this is SharedCommonizerTarget) { return targets.any { it == other } || targets.any { it.isAncestorOf(other) } diff --git a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt index e9bfb1a6551..d35d3062d20 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt @@ -53,5 +53,28 @@ class CommonizerTargetUtilsTest { "Expected all targets present" ) } + + @Test + fun allLeaves() { + val target = parseCommonizerTarget("((a, b), (c, d), (e, (f, g)))") + assertEquals( + setOf( + LeafCommonizerTarget("a"), + LeafCommonizerTarget("b"), + LeafCommonizerTarget("c"), + LeafCommonizerTarget("d"), + LeafCommonizerTarget("e"), + LeafCommonizerTarget("f"), + LeafCommonizerTarget("g") + ), + target.allLeaves(), + "Expected leaf targets present" + ) + + assertEquals( + setOf(LeafCommonizerTarget("a")), LeafCommonizerTarget("a").allLeaves(), + "Expected LeafCommonizerTarget returns itself in 'allLeaves'" + ) + } }