From 3d6893e5180a45d9a050eba5dca62afaac32eeff Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 8 Mar 2021 16:05:15 +0100 Subject: [PATCH] [Commonizer] Implement safe SharedCommonizerTarget factory function Do not try to instantiate SharedCommonizerTarget with no leaves ^KT-45350 Verification Pending --- .../kotlin/descriptors/commonizer/CommonizerTarget.kt | 8 +++++++- .../kotlin/descriptors/commonizer/cli/nativeTasks.kt | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/native/commonizer-api/src/org/jetbrains/kotlin/descriptors/commonizer/CommonizerTarget.kt b/native/commonizer-api/src/org/jetbrains/kotlin/descriptors/commonizer/CommonizerTarget.kt index 35328d0f057..cc7123b1895 100644 --- a/native/commonizer-api/src/org/jetbrains/kotlin/descriptors/commonizer/CommonizerTarget.kt +++ b/native/commonizer-api/src/org/jetbrains/kotlin/descriptors/commonizer/CommonizerTarget.kt @@ -29,8 +29,14 @@ public data class SharedCommonizerTarget(val targets: Set) : C public constructor(vararg targets: KonanTarget) : this(targets.toSet()) public constructor(targets: Iterable) : this(targets.map(::LeafCommonizerTarget).toSet()) + public companion object { + public fun ifNotEmpty(targets: Set): SharedCommonizerTarget? { + return if (targets.isNotEmpty()) SharedCommonizerTarget(targets) else null + } + } + init { - require(targets.isNotEmpty()) + require(targets.isNotEmpty()) { "Empty 'SharedCommonizerTarget': Expected at least one target" } } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt index 992b71ab01b..4215c665aef 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt @@ -117,7 +117,10 @@ internal class NativeDistributionCommonize(options: Collection>) : Tas ) if (copyStdlib) this add CopyStdlibResultsConsumer(distribution, destination, progressLogger) if (copyEndorsedLibs) this add CopyEndorsedLibrairesResultsConsumer(distribution, destination, progressLogger) - this add LoggingResultsConsumer(SharedCommonizerTarget(existingTargets), progressLogger) + + SharedCommonizerTarget.ifNotEmpty(existingTargets)?.let { sharedTargetForLogger -> + this add LoggingResultsConsumer(sharedTargetForLogger, progressLogger) + } } val targetNames = commonizerTargets.joinToString { it.prettyName }