From a78645e8584b58b1f1b6bec9e2d26ed04aecb69c Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Fri, 26 Mar 2021 10:38:27 +0100 Subject: [PATCH] Implement CommonizerTarget.withAllAncestors --- .../kotlin/commonizer/CommonizerTarget.kt | 9 +++++++ .../commonizer/CommonizerTargetUtilsTest.kt | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+) 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 6ab401adf8b..755041d5b17 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.commonizer +import org.jetbrains.kotlin.commonizer.util.transitiveClosure import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.Serializable @@ -101,6 +102,14 @@ public val CommonizerTarget.level: Int } } +public fun CommonizerTarget.withAllAncestors(): Set { + return setOf(this) + transitiveClosure(this) { + when (this) { + is SharedCommonizerTarget -> targets + is LeafCommonizerTarget -> emptyList() + } + } +} public infix fun CommonizerTarget.isAncestorOf(other: CommonizerTarget): Boolean { if (this is SharedCommonizerTarget) { 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 6f54f693a91..e9bfb1a6551 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetUtilsTest.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.commonizer import kotlin.test.Test +import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -28,4 +29,29 @@ class CommonizerTargetUtilsTest { assertTrue(parseCommonizerTarget("(c, d)") isDescendentOf hierarchicalParent) assertTrue(LeafCommonizerTarget("e") isDescendentOf hierarchicalParent) } + + @Test + fun withAllAncestors() { + val target = parseCommonizerTarget("((a, b), (c, d), (e, (f, g)))") + + assertEquals( + setOf( + target, + parseCommonizerTarget("(a, b)"), + parseCommonizerTarget("(c, d)"), + parseCommonizerTarget("(e, (f, g))"), + parseCommonizerTarget("(f, g)"), + LeafCommonizerTarget("a"), + LeafCommonizerTarget("b"), + LeafCommonizerTarget("c"), + LeafCommonizerTarget("d"), + LeafCommonizerTarget("e"), + LeafCommonizerTarget("f"), + LeafCommonizerTarget("g") + ), + target.withAllAncestors(), + "Expected all targets present" + ) + } } +