[Commonizer] move commonizer setting keys to the commonizer-cli module
Get rid of `OptionAlias` as unnecessary; keys will be used directly
This commit is contained in:
-4
@@ -6,16 +6,12 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.tasks.OutputDirectory
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.ensureMaxFileNameLength
|
||||
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
|
||||
import org.jetbrains.kotlin.commonizer.cli.OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS
|
||||
import org.jetbrains.kotlin.commonizer.identityString
|
||||
import org.jetbrains.kotlin.commonizer.setTo
|
||||
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
||||
import java.io.File
|
||||
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerLogLevel
|
||||
import org.jetbrains.kotlin.commonizer.cli.OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS
|
||||
import org.jetbrains.kotlin.commonizer.OptimisticNumberCommonizationEnabledKey
|
||||
import org.jetbrains.kotlin.commonizer.setTo
|
||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
|
||||
@@ -22,7 +22,7 @@ internal val Project.commonizerLogLevel: CommonizerLogLevel
|
||||
return if (logger.isInfoEnabled) CommonizerLogLevel.Info else CommonizerLogLevel.Quiet
|
||||
}
|
||||
|
||||
internal val Project.additionalCommonizerSettings: List<AdditionalCommonizerSetting>
|
||||
internal val Project.additionalCommonizerSettings: List<AdditionalCommonizerSetting<*>>
|
||||
get() = listOf(
|
||||
OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS setTo isOptimisticNumberCommonizationEnabled
|
||||
OptimisticNumberCommonizationEnabledKey setTo isOptimisticNumberCommonizationEnabled
|
||||
)
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ internal class NativeDistributionCommonizationCache(
|
||||
outputDirectory: File,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
logLevel: CommonizerLogLevel,
|
||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
||||
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||
) {
|
||||
if (!project.isNativeDistributionCommonizationCacheEnabled) {
|
||||
logInfo("Cache disabled")
|
||||
|
||||
@@ -29,21 +29,21 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
outputDirectory: File,
|
||||
logLevel: CommonizerLogLevel,
|
||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
||||
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||
) {
|
||||
if (inputLibraries.isEmpty()) return
|
||||
val arguments = mutableListOf<String>().apply {
|
||||
add("native-klib-commonize")
|
||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
||||
add(INPUT_LIBRARIES_OPTION_ALIAS.argumentString); add(inputLibraries.joinToString(";") { it.absolutePath })
|
||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
||||
add("-$NATIVE_DISTRIBUTION_PATH_ALIAS"); add(konanHome.absolutePath)
|
||||
add("-$INPUT_LIBRARIES_ALIAS"); add(inputLibraries.joinToString(";") { it.absolutePath })
|
||||
add("-$OUTPUT_COMMONIZER_TARGETS_ALIAS"); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add("-$OUTPUT_PATH_ALIAS"); add(outputDirectory.absolutePath)
|
||||
if (dependencyLibraries.isNotEmpty()) {
|
||||
add(DEPENDENCY_LIBRARIES_OPTION_ALIAS.argumentString); add(dependencyLibraries.joinToString(";"))
|
||||
add("-$DEPENDENCY_LIBRARIES_ALIAS"); add(dependencyLibraries.joinToString(";"))
|
||||
}
|
||||
add(LOG_LEVEL_OPTION_ALIAS.argumentString); add(logLevel.name.lowercase())
|
||||
for ((settingArgument, settingValue) in additionalSettings) {
|
||||
add(settingArgument); add(settingValue.toString())
|
||||
add("-$LOG_LEVEL_ALIAS"); add(logLevel.name.lowercase())
|
||||
for ((settingKey, settingValue) in additionalSettings) {
|
||||
add("-${settingKey.alias}"); add(settingValue.toString())
|
||||
}
|
||||
}
|
||||
executor(arguments)
|
||||
@@ -54,16 +54,16 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
||||
outputDirectory: File,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
logLevel: CommonizerLogLevel,
|
||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
||||
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||
) {
|
||||
val arguments = mutableListOf<String>().apply {
|
||||
add("native-dist-commonize")
|
||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add(LOG_LEVEL_OPTION_ALIAS.argumentString); add(logLevel.name.lowercase())
|
||||
for ((settingArgument, settingValue) in additionalSettings) {
|
||||
add(settingArgument); add(settingValue.toString())
|
||||
add("-$NATIVE_DISTRIBUTION_PATH_ALIAS"); add(konanHome.absolutePath)
|
||||
add("-$OUTPUT_PATH_ALIAS"); add(outputDirectory.absolutePath)
|
||||
add("-$OUTPUT_COMMONIZER_TARGETS_ALIAS"); add(outputTargets.joinToString(";") { it.identityString })
|
||||
add("-$LOG_LEVEL_ALIAS"); add(logLevel.name.lowercase())
|
||||
for ((settingKey, settingValue) in additionalSettings) {
|
||||
add("-${settingKey.alias}"); add(settingValue.toString())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.commonizer
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.cli.OptionAlias
|
||||
import java.io.File
|
||||
import java.io.Serializable
|
||||
|
||||
@@ -18,7 +17,7 @@ public interface CInteropCommonizer : Serializable {
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
outputDirectory: File,
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
||||
additionalSettings: List<AdditionalCommonizerSetting<*>> = emptyList(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -29,14 +28,14 @@ public interface NativeDistributionCommonizer : Serializable {
|
||||
outputDirectory: File,
|
||||
outputTargets: Set<SharedCommonizerTarget>,
|
||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
||||
additionalSettings: List<AdditionalCommonizerSetting<*>> = emptyList(),
|
||||
)
|
||||
}
|
||||
|
||||
public data class AdditionalCommonizerSetting(
|
||||
public val key: String,
|
||||
public val value: Any,
|
||||
public data class AdditionalCommonizerSetting<T : Any>(
|
||||
public val key: CommonizerSettings.Key<T>,
|
||||
public val value: T,
|
||||
)
|
||||
|
||||
public infix fun OptionAlias.setTo(settingValue: Any): AdditionalCommonizerSetting =
|
||||
AdditionalCommonizerSetting(this.argumentString, settingValue)
|
||||
public infix fun <T : Any> CommonizerSettings.Key<T>.setTo(settingValue: T): AdditionalCommonizerSetting<T> =
|
||||
AdditionalCommonizerSetting(this, settingValue)
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.commonizer
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.cli.OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS
|
||||
|
||||
public interface CommonizerSettings {
|
||||
|
||||
public sealed class Key<T : Any> {
|
||||
public abstract val defaultValue: T
|
||||
public abstract val alias: String
|
||||
}
|
||||
|
||||
public fun <T : Any> getSetting(key: Key<T>): T
|
||||
}
|
||||
|
||||
public object OptimisticNumberCommonizationEnabledKey : CommonizerSettings.Key<Boolean>() {
|
||||
override val defaultValue: Boolean = true
|
||||
override val alias: String
|
||||
get() = OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS
|
||||
}
|
||||
+11
-32
@@ -7,37 +7,16 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
// General
|
||||
|
||||
private const val DEPENDENCY_LIBRARIES_ALIAS: String = "dependency-libraries"
|
||||
private const val INPUT_LIBRARIES_ALIAS: String = "input-libraries"
|
||||
private const val LOG_LEVEL_ALIAS: String = "log-level"
|
||||
private const val NATIVE_DISTRIBUTION_PATH_ALIAS: String = "distribution-path"
|
||||
private const val OUTPUT_COMMONIZER_TARGETS_ALIAS: String = "output-targets"
|
||||
private const val OUTPUT_PATH_ALIAS: String = "output-path"
|
||||
private const val STATS_TYPE_ALIAS: String = "log-stats"
|
||||
private const val NATIVE_TARGETS_ALIAS: String = "targets"
|
||||
private const val COPY_STDLIB_ALIAS: String = "copy-stdlib"
|
||||
private const val COPY_ENDORSED_LIBS_ALIAS: String = "copy-endorsed-libs"
|
||||
|
||||
public val DEPENDENCY_LIBRARIES_OPTION_ALIAS: OptionAlias = OptionAlias(DEPENDENCY_LIBRARIES_ALIAS)
|
||||
public val INPUT_LIBRARIES_OPTION_ALIAS: OptionAlias = OptionAlias(INPUT_LIBRARIES_ALIAS)
|
||||
public val LOG_LEVEL_OPTION_ALIAS: OptionAlias = OptionAlias(LOG_LEVEL_ALIAS)
|
||||
public val NATIVE_DISTRIBUTION_OPTION_ALIAS: OptionAlias = OptionAlias(NATIVE_DISTRIBUTION_PATH_ALIAS)
|
||||
public val OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS: OptionAlias = OptionAlias(OUTPUT_COMMONIZER_TARGETS_ALIAS)
|
||||
public val OUTPUT_OPTION_ALIAS: OptionAlias = OptionAlias(OUTPUT_PATH_ALIAS)
|
||||
public val STATS_TYPE_OPTION_ALIAS: OptionAlias = OptionAlias(STATS_TYPE_ALIAS)
|
||||
public val NATIVE_TARGETS_OPTION_ALIAS: OptionAlias = OptionAlias(NATIVE_TARGETS_ALIAS)
|
||||
public val COPY_STDLIB_OPTION_ALIAS: OptionAlias = OptionAlias(COPY_STDLIB_ALIAS)
|
||||
public val COPY_ENDORSED_LIBS_OPTION_ALIAS: OptionAlias = OptionAlias(COPY_ENDORSED_LIBS_ALIAS)
|
||||
public const val DEPENDENCY_LIBRARIES_ALIAS: String = "dependency-libraries"
|
||||
public const val INPUT_LIBRARIES_ALIAS: String = "input-libraries"
|
||||
public const val LOG_LEVEL_ALIAS: String = "log-level"
|
||||
public const val NATIVE_DISTRIBUTION_PATH_ALIAS: String = "distribution-path"
|
||||
public const val OUTPUT_COMMONIZER_TARGETS_ALIAS: String = "output-targets"
|
||||
public const val OUTPUT_PATH_ALIAS: String = "output-path"
|
||||
public const val STATS_TYPE_ALIAS: String = "log-stats"
|
||||
public const val NATIVE_TARGETS_ALIAS: String = "targets"
|
||||
public const val COPY_STDLIB_ALIAS: String = "copy-stdlib"
|
||||
public const val COPY_ENDORSED_LIBS_ALIAS: String = "copy-endorsed-libs"
|
||||
|
||||
// Commonizer settings
|
||||
private const val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS: String = "optimistic-numbers"
|
||||
|
||||
public val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS: OptionAlias = OptionAlias(OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS)
|
||||
|
||||
@JvmInline
|
||||
public value class OptionAlias(public val aliasString: String) {
|
||||
public val argumentString: String
|
||||
get() = "-$aliasString"
|
||||
|
||||
override fun toString(): String = aliasString
|
||||
}
|
||||
public const val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS: String = "optimistic-numbers"
|
||||
|
||||
@@ -5,19 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.commonizer
|
||||
|
||||
interface CommonizerSettings {
|
||||
|
||||
sealed class Key<T : Any> {
|
||||
abstract val defaultValue: T
|
||||
}
|
||||
|
||||
fun <T : Any> getSetting(key: Key<T>): T
|
||||
}
|
||||
|
||||
object OptimisticNumberCommonizationEnabledKey : CommonizerSettings.Key<Boolean>() {
|
||||
override val defaultValue: Boolean = true
|
||||
}
|
||||
|
||||
internal object DefaultCommonizerSettings : CommonizerSettings {
|
||||
override fun <T : Any> getSetting(key: CommonizerSettings.Key<T>): T {
|
||||
return key.defaultValue
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
internal class BooleanOptionType(
|
||||
alias: OptionAlias,
|
||||
alias: String,
|
||||
description: String,
|
||||
mandatory: Boolean
|
||||
) : OptionType<Boolean>(alias, description, mandatory) {
|
||||
|
||||
+2
-3
@@ -8,11 +8,10 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerSettings
|
||||
|
||||
internal sealed class CommonizerSettingOptionType<T : Any>(
|
||||
alias: OptionAlias,
|
||||
val commonizerSettingKey: CommonizerSettings.Key<T>,
|
||||
description: String,
|
||||
val commonizerSettingKey: CommonizerSettings.Key<T>
|
||||
) : OptionType<T>(
|
||||
alias,
|
||||
commonizerSettingKey.alias,
|
||||
description,
|
||||
mandatory = false,
|
||||
)
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.commonizer.parseCommonizerDependency
|
||||
|
||||
internal abstract class DependenciesLibrariesSetOptionType(
|
||||
mandatory: Boolean,
|
||||
alias: OptionAlias,
|
||||
alias: String,
|
||||
description: String
|
||||
) : OptionType<List<CommonizerDependency>>(
|
||||
mandatory = mandatory,
|
||||
|
||||
+1
-1
@@ -7,6 +7,6 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
internal object DependencyLibrariesOptionType : DependenciesLibrariesSetOptionType(
|
||||
mandatory = false,
|
||||
alias = DEPENDENCY_LIBRARIES_OPTION_ALIAS,
|
||||
alias = DEPENDENCY_LIBRARIES_ALIAS,
|
||||
description = "';' separated list of klib file paths that can be used as dependency"
|
||||
)
|
||||
|
||||
+1
-1
@@ -7,6 +7,6 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
internal object InputLibrariesOptionType : LibrariesSetOptionType(
|
||||
mandatory = true,
|
||||
alias = INPUT_LIBRARIES_OPTION_ALIAS,
|
||||
alias = INPUT_LIBRARIES_ALIAS,
|
||||
description = "';' separated list of klib file paths that will get commonized"
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.io.File
|
||||
|
||||
internal abstract class LibrariesSetOptionType(
|
||||
mandatory: Boolean,
|
||||
alias: OptionAlias,
|
||||
alias: String,
|
||||
description: String
|
||||
) : OptionType<List<File>>(
|
||||
mandatory = mandatory,
|
||||
|
||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerLogLevel
|
||||
|
||||
internal object LogLevelOptionType : OptionType<CommonizerLogLevel>(LOG_LEVEL_OPTION_ALIAS, "{quiet, info}", false) {
|
||||
internal object LogLevelOptionType : OptionType<CommonizerLogLevel>(LOG_LEVEL_ALIAS, "{quiet, info}", false) {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<CommonizerLogLevel> {
|
||||
return when (rawValue.lowercase().trim()) {
|
||||
"quiet" -> Option(this, CommonizerLogLevel.Quiet)
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
import java.io.File
|
||||
|
||||
internal object NativeDistributionOptionType : OptionType<File>(NATIVE_DISTRIBUTION_OPTION_ALIAS, "Path to the Kotlin/Native distribution") {
|
||||
internal object NativeDistributionOptionType : OptionType<File>(NATIVE_DISTRIBUTION_PATH_ALIAS, "Path to the Kotlin/Native distribution") {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<File> {
|
||||
val file = File(rawValue)
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget.Companion.predefinedTargets
|
||||
|
||||
internal object NativeTargetsOptionType : OptionType<List<KonanTarget>>(
|
||||
NATIVE_TARGETS_OPTION_ALIAS, "Comma-separated list of hardware targets", mandatory = false
|
||||
NATIVE_TARGETS_ALIAS, "Comma-separated list of hardware targets", mandatory = false
|
||||
) {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<List<KonanTarget>> {
|
||||
val targetNames = rawValue.split(',')
|
||||
|
||||
+1
-2
@@ -8,9 +8,8 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
import org.jetbrains.kotlin.commonizer.OptimisticNumberCommonizationEnabledKey
|
||||
|
||||
internal object OptimisticNumberCommonizationOptionType : CommonizerSettingOptionType<Boolean>(
|
||||
OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS,
|
||||
"Boolean (default true)\nEnable commonization of integer types with different bit width to the most narrow among them",
|
||||
OptimisticNumberCommonizationEnabledKey,
|
||||
"Boolean (default true)\nEnable commonization of integer types with different bit width to the most narrow among them",
|
||||
) {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<Boolean> =
|
||||
Option(this, parseBoolean(rawValue, onError))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
internal abstract class OptionType<T>(
|
||||
val alias: OptionAlias,
|
||||
val alias: String,
|
||||
val description: String,
|
||||
val mandatory: Boolean = true
|
||||
) {
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.parseCommonizerTarget
|
||||
|
||||
internal object OutputCommonizerTargetsOptionType : OptionType<Set<SharedCommonizerTarget>>(
|
||||
alias = OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS,
|
||||
alias = OUTPUT_COMMONIZER_TARGETS_ALIAS,
|
||||
description = "All output targets separated with ';'",
|
||||
mandatory = true
|
||||
) {
|
||||
|
||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
import java.io.File
|
||||
|
||||
internal object OutputOptionType : OptionType<File>(OUTPUT_OPTION_ALIAS, "Destination for commonized libraries") {
|
||||
internal object OutputOptionType : OptionType<File>(OUTPUT_PATH_ALIAS, "Destination for commonized libraries") {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<File> {
|
||||
val file = File(rawValue)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.stats.StatsType
|
||||
|
||||
internal object StatsTypeOptionType : OptionType<StatsType>(STATS_TYPE_OPTION_ALIAS, DESCRIPTION, mandatory = false) {
|
||||
internal object StatsTypeOptionType : OptionType<StatsType>(STATS_TYPE_ALIAS, DESCRIPTION, mandatory = false) {
|
||||
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<StatsType> {
|
||||
val value = StatsType.values().firstOrNull { it.name.equals(rawValue, ignoreCase = true) }
|
||||
?: onError("Invalid stats type: $rawValue")
|
||||
|
||||
@@ -30,7 +30,7 @@ internal abstract class Task(private val options: Collection<Option<*>>) : Compa
|
||||
abstract fun execute(logPrefix: String = "")
|
||||
|
||||
protected inline fun <reified T, reified O : OptionType<T>> getMandatory(nameFilter: (String) -> Boolean = { true }): T {
|
||||
val option = options.filter { it.type is O }.single { nameFilter(it.type.alias.aliasString) }
|
||||
val option = options.filter { it.type is O }.single { nameFilter(it.type.alias) }
|
||||
check(option.type.mandatory)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@@ -38,7 +38,7 @@ internal abstract class Task(private val options: Collection<Option<*>>) : Compa
|
||||
}
|
||||
|
||||
internal inline fun <reified T, reified O : OptionType<T>> getOptional(nameFilter: (String) -> Boolean = { true }): T? {
|
||||
val option = options.filter { it.type is O }.singleOrNull { nameFilter(it.type.alias.aliasString) }
|
||||
val option = options.filter { it.type is O }.singleOrNull { nameFilter(it.type.alias) }
|
||||
if (option != null) check(!option.type.mandatory)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
|
||||
@@ -20,12 +20,12 @@ internal enum class TaskType(
|
||||
NativeTargetsOptionType,
|
||||
OutputCommonizerTargetsOptionType,
|
||||
BooleanOptionType(
|
||||
COPY_STDLIB_OPTION_ALIAS,
|
||||
COPY_STDLIB_ALIAS,
|
||||
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
||||
mandatory = false
|
||||
),
|
||||
BooleanOptionType(
|
||||
COPY_ENDORSED_LIBS_OPTION_ALIAS,
|
||||
COPY_ENDORSED_LIBS_ALIAS,
|
||||
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
||||
mandatory = false
|
||||
),
|
||||
|
||||
@@ -46,7 +46,7 @@ private fun parseTask(
|
||||
tasks: MutableList<Task>
|
||||
): String? {
|
||||
val taskType = TaskType.getByAlias(taskAlias) ?: printUsageAndExit("Unknown task $taskAlias")
|
||||
val optionTypes = taskType.optionTypes.associateBy { it.alias.aliasString }
|
||||
val optionTypes = taskType.optionTypes.associateBy { it.alias }
|
||||
val options = mutableMapOf<String, Option<*>>()
|
||||
|
||||
fun buildOngoingTask() {
|
||||
@@ -117,7 +117,7 @@ private fun printUsageAndExit(errorMessage: String? = null): Nothing {
|
||||
println(formatLeft(1, if (taskType.optionTypes.isNotEmpty()) "Options:" else "No options."))
|
||||
for (optionType in taskType.optionTypes) {
|
||||
val lines = optionType.description.split('\n')
|
||||
println(formatBoth(2, "-${optionType.alias.aliasString}", lines.first()))
|
||||
println(formatBoth(2, "-${optionType.alias}", lines.first()))
|
||||
lines.drop(1).forEach { println(StringBuilder().formatRight(it)) }
|
||||
}
|
||||
println()
|
||||
|
||||
Reference in New Issue
Block a user