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 6ac3193e1de..77c6f344f5d 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/CommonizerTarget.kt @@ -34,10 +34,6 @@ public data class SharedCommonizerTarget(val targets: Set) : C return if (targets.isNotEmpty()) SharedCommonizerTarget(targets) else null } } - - init { - require(targets.isNotEmpty()) { "Empty 'SharedCommonizerTarget': Expected at least one target" } - } } public fun CommonizerTarget(konanTargets: Iterable): CommonizerTarget { @@ -101,6 +97,6 @@ public val CommonizerTarget.level: Int get() { return when (this) { is LeafCommonizerTarget -> return 0 - is SharedCommonizerTarget -> targets.maxOf { it.level } + 1 + is SharedCommonizerTarget -> if (targets.isNotEmpty()) targets.maxOf { it.level } + 1 else 0 } } diff --git a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/parseCommonizerTarget.kt b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/parseCommonizerTarget.kt index 21994f533ac..f411c4aa009 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/parseCommonizerTarget.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/commonizer/parseCommonizerTarget.kt @@ -46,8 +46,8 @@ private sealed class IdentityStringToken { return when (this) { is Word -> value is Separator -> ", " - is SharedTargetStart -> "[" - is SharedTargetEnd -> "]" + is SharedTargetStart -> "(" + is SharedTargetEnd -> ")" } } } @@ -118,11 +118,11 @@ private data class AnyOfParser(val parsers: List>) : Parser Parser.oneOrMore(): Parser> { - return OneOrMoreParser(this) +private fun Parser.zeroOrMore(): Parser> { + return ZeroOrMoreParser(this) } -private data class OneOrMoreParser(val parser: Parser) : Parser> { +private data class ZeroOrMoreParser(val parser: Parser) : Parser> { override fun invoke(tokens: List): ParserOutput>? { val outputs = mutableListOf() var remainingTokens = tokens @@ -132,9 +132,6 @@ private data class OneOrMoreParser(val parser: Parser) : Parser { override fun invoke(tokens: List): ParserOutput? { if (tokens.firstOrNull() !is SharedTargetStart) return null - val innerParser = anyOf(LeafTargetParser, SharedTargetParser).ignore(Separator).oneOrMore() + val innerParser = anyOf(LeafTargetParser, SharedTargetParser).ignore(Separator).zeroOrMore() val innerParserOutput = innerParser(tokens.drop(1)) ?: return null val closingToken = innerParserOutput.remaining.firstOrNull() if (closingToken != SharedTargetEnd) { - error("Missing ']' at ${tokens.joinToString("")}") + error("Missing '${SharedTargetEnd}' at ${tokens.joinToString("")}") } return ParserOutput(SharedTargetSyntaxNode(innerParserOutput.value), innerParserOutput.remaining.drop(1)) diff --git a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetIdentityStringTest.kt b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetIdentityStringTest.kt index 3c58779e48d..c5a09954331 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetIdentityStringTest.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetIdentityStringTest.kt @@ -85,6 +85,11 @@ class CommonizerTargetIdentityStringTest { ) } + @Test + fun `empty shared target`() { + assertEquals(SharedCommonizerTarget(emptySet()), parseCommonizerTarget("()")) + } + @Test(expected = IllegalArgumentException::class) fun `fail parsing CommonizerTarget 1`() { parseCommonizerTarget("xxx,") @@ -95,11 +100,6 @@ class CommonizerTargetIdentityStringTest { parseCommonizerTarget("") } - @Test(expected = IllegalArgumentException::class) - fun `fail parsing CommonizerTarget 3`() { - parseCommonizerTarget("()") - } - @Test(expected = IllegalArgumentException::class) fun `fail parsing CommonizerTarget 4`() { parseCommonizerTarget("(xxx") diff --git a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetPrettyNameTest.kt b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetPrettyNameTest.kt index 77aa06dd517..a1c9e9f3b0a 100644 --- a/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetPrettyNameTest.kt +++ b/native/commonizer-api/test/org/jetbrains/kotlin/commonizer/CommonizerTargetPrettyNameTest.kt @@ -72,9 +72,11 @@ class CommonizerTargetPrettyNameTest { ) } - @Test(expected = IllegalArgumentException::class) + @Test fun sharedTargetNoInnerTargets() { - SharedCommonizerTarget(emptySet()) + assertEquals( + "[]", SharedCommonizerTarget(emptySet()).prettyName + ) } private companion object {