[Commonizer] Implement safe SharedCommonizerTarget factory function

Do not try to instantiate SharedCommonizerTarget with no leaves
^KT-45350 Verification Pending
This commit is contained in:
sebastian.sellmair
2021-03-08 16:05:15 +01:00
committed by Space
parent 6527452143
commit 3d6893e518
2 changed files with 11 additions and 2 deletions
@@ -29,8 +29,14 @@ public data class SharedCommonizerTarget(val targets: Set<CommonizerTarget>) : C
public constructor(vararg targets: KonanTarget) : this(targets.toSet())
public constructor(targets: Iterable<KonanTarget>) : this(targets.map(::LeafCommonizerTarget).toSet())
public companion object {
public fun ifNotEmpty(targets: Set<CommonizerTarget>): SharedCommonizerTarget? {
return if (targets.isNotEmpty()) SharedCommonizerTarget(targets) else null
}
}
init {
require(targets.isNotEmpty())
require(targets.isNotEmpty()) { "Empty 'SharedCommonizerTarget': Expected at least one target" }
}
}
@@ -117,7 +117,10 @@ internal class NativeDistributionCommonize(options: Collection<Option<*>>) : 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 }