[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
|
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.tasks.OutputDirectory
|
import org.gradle.api.tasks.OutputDirectory
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout
|
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
|
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.base64Hash
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.ensureMaxFileNameLength
|
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.identityString
|
||||||
import org.jetbrains.kotlin.commonizer.setTo
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
import org.jetbrains.kotlin.gradle.utils.outputFilesProvider
|
||||||
import java.io.File
|
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.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
|
import org.jetbrains.kotlin.commonizer.AdditionalCommonizerSetting
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerLogLevel
|
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.commonizer.setTo
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
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
|
return if (logger.isInfoEnabled) CommonizerLogLevel.Info else CommonizerLogLevel.Quiet
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val Project.additionalCommonizerSettings: List<AdditionalCommonizerSetting>
|
internal val Project.additionalCommonizerSettings: List<AdditionalCommonizerSetting<*>>
|
||||||
get() = listOf(
|
get() = listOf(
|
||||||
OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_OPTION_ALIAS setTo isOptimisticNumberCommonizationEnabled
|
OptimisticNumberCommonizationEnabledKey setTo isOptimisticNumberCommonizationEnabled
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ internal class NativeDistributionCommonizationCache(
|
|||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
outputTargets: Set<SharedCommonizerTarget>,
|
outputTargets: Set<SharedCommonizerTarget>,
|
||||||
logLevel: CommonizerLogLevel,
|
logLevel: CommonizerLogLevel,
|
||||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||||
) {
|
) {
|
||||||
if (!project.isNativeDistributionCommonizationCacheEnabled) {
|
if (!project.isNativeDistributionCommonizationCacheEnabled) {
|
||||||
logInfo("Cache disabled")
|
logInfo("Cache disabled")
|
||||||
|
|||||||
@@ -29,21 +29,21 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
|||||||
outputTargets: Set<SharedCommonizerTarget>,
|
outputTargets: Set<SharedCommonizerTarget>,
|
||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
logLevel: CommonizerLogLevel,
|
logLevel: CommonizerLogLevel,
|
||||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||||
) {
|
) {
|
||||||
if (inputLibraries.isEmpty()) return
|
if (inputLibraries.isEmpty()) return
|
||||||
val arguments = mutableListOf<String>().apply {
|
val arguments = mutableListOf<String>().apply {
|
||||||
add("native-klib-commonize")
|
add("native-klib-commonize")
|
||||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
add("-$NATIVE_DISTRIBUTION_PATH_ALIAS"); add(konanHome.absolutePath)
|
||||||
add(INPUT_LIBRARIES_OPTION_ALIAS.argumentString); add(inputLibraries.joinToString(";") { it.absolutePath })
|
add("-$INPUT_LIBRARIES_ALIAS"); add(inputLibraries.joinToString(";") { it.absolutePath })
|
||||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
add("-$OUTPUT_COMMONIZER_TARGETS_ALIAS"); add(outputTargets.joinToString(";") { it.identityString })
|
||||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
add("-$OUTPUT_PATH_ALIAS"); add(outputDirectory.absolutePath)
|
||||||
if (dependencyLibraries.isNotEmpty()) {
|
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())
|
add("-$LOG_LEVEL_ALIAS"); add(logLevel.name.lowercase())
|
||||||
for ((settingArgument, settingValue) in additionalSettings) {
|
for ((settingKey, settingValue) in additionalSettings) {
|
||||||
add(settingArgument); add(settingValue.toString())
|
add("-${settingKey.alias}"); add(settingValue.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
executor(arguments)
|
executor(arguments)
|
||||||
@@ -54,16 +54,16 @@ public class CliCommonizer(private val executor: Executor) : NativeDistributionC
|
|||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
outputTargets: Set<SharedCommonizerTarget>,
|
outputTargets: Set<SharedCommonizerTarget>,
|
||||||
logLevel: CommonizerLogLevel,
|
logLevel: CommonizerLogLevel,
|
||||||
additionalSettings: List<AdditionalCommonizerSetting>,
|
additionalSettings: List<AdditionalCommonizerSetting<*>>,
|
||||||
) {
|
) {
|
||||||
val arguments = mutableListOf<String>().apply {
|
val arguments = mutableListOf<String>().apply {
|
||||||
add("native-dist-commonize")
|
add("native-dist-commonize")
|
||||||
add(NATIVE_DISTRIBUTION_OPTION_ALIAS.argumentString); add(konanHome.absolutePath)
|
add("-$NATIVE_DISTRIBUTION_PATH_ALIAS"); add(konanHome.absolutePath)
|
||||||
add(OUTPUT_OPTION_ALIAS.argumentString); add(outputDirectory.absolutePath)
|
add("-$OUTPUT_PATH_ALIAS"); add(outputDirectory.absolutePath)
|
||||||
add(OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS.argumentString); add(outputTargets.joinToString(";") { it.identityString })
|
add("-$OUTPUT_COMMONIZER_TARGETS_ALIAS"); add(outputTargets.joinToString(";") { it.identityString })
|
||||||
add(LOG_LEVEL_OPTION_ALIAS.argumentString); add(logLevel.name.lowercase())
|
add("-$LOG_LEVEL_ALIAS"); add(logLevel.name.lowercase())
|
||||||
for ((settingArgument, settingValue) in additionalSettings) {
|
for ((settingKey, settingValue) in additionalSettings) {
|
||||||
add(settingArgument); add(settingValue.toString())
|
add("-${settingKey.alias}"); add(settingValue.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.commonizer
|
package org.jetbrains.kotlin.commonizer
|
||||||
|
|
||||||
import org.jetbrains.kotlin.commonizer.cli.OptionAlias
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
@@ -18,7 +17,7 @@ public interface CInteropCommonizer : Serializable {
|
|||||||
outputTargets: Set<SharedCommonizerTarget>,
|
outputTargets: Set<SharedCommonizerTarget>,
|
||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
additionalSettings: List<AdditionalCommonizerSetting<*>> = emptyList(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,14 +28,14 @@ public interface NativeDistributionCommonizer : Serializable {
|
|||||||
outputDirectory: File,
|
outputDirectory: File,
|
||||||
outputTargets: Set<SharedCommonizerTarget>,
|
outputTargets: Set<SharedCommonizerTarget>,
|
||||||
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
logLevel: CommonizerLogLevel = CommonizerLogLevel.Quiet,
|
||||||
additionalSettings: List<AdditionalCommonizerSetting> = emptyList(),
|
additionalSettings: List<AdditionalCommonizerSetting<*>> = emptyList(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
public data class AdditionalCommonizerSetting(
|
public data class AdditionalCommonizerSetting<T : Any>(
|
||||||
public val key: String,
|
public val key: CommonizerSettings.Key<T>,
|
||||||
public val value: Any,
|
public val value: T,
|
||||||
)
|
)
|
||||||
|
|
||||||
public infix fun OptionAlias.setTo(settingValue: Any): AdditionalCommonizerSetting =
|
public infix fun <T : Any> CommonizerSettings.Key<T>.setTo(settingValue: T): AdditionalCommonizerSetting<T> =
|
||||||
AdditionalCommonizerSetting(this.argumentString, settingValue)
|
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
|
// General
|
||||||
|
|
||||||
private const val DEPENDENCY_LIBRARIES_ALIAS: String = "dependency-libraries"
|
public const val DEPENDENCY_LIBRARIES_ALIAS: String = "dependency-libraries"
|
||||||
private const val INPUT_LIBRARIES_ALIAS: String = "input-libraries"
|
public const val INPUT_LIBRARIES_ALIAS: String = "input-libraries"
|
||||||
private const val LOG_LEVEL_ALIAS: String = "log-level"
|
public const val LOG_LEVEL_ALIAS: String = "log-level"
|
||||||
private const val NATIVE_DISTRIBUTION_PATH_ALIAS: String = "distribution-path"
|
public const val NATIVE_DISTRIBUTION_PATH_ALIAS: String = "distribution-path"
|
||||||
private const val OUTPUT_COMMONIZER_TARGETS_ALIAS: String = "output-targets"
|
public const val OUTPUT_COMMONIZER_TARGETS_ALIAS: String = "output-targets"
|
||||||
private const val OUTPUT_PATH_ALIAS: String = "output-path"
|
public const val OUTPUT_PATH_ALIAS: String = "output-path"
|
||||||
private const val STATS_TYPE_ALIAS: String = "log-stats"
|
public const val STATS_TYPE_ALIAS: String = "log-stats"
|
||||||
private const val NATIVE_TARGETS_ALIAS: String = "targets"
|
public const val NATIVE_TARGETS_ALIAS: String = "targets"
|
||||||
private const val COPY_STDLIB_ALIAS: String = "copy-stdlib"
|
public const val COPY_STDLIB_ALIAS: String = "copy-stdlib"
|
||||||
private const val COPY_ENDORSED_LIBS_ALIAS: String = "copy-endorsed-libs"
|
public 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)
|
|
||||||
|
|
||||||
// Commonizer settings
|
// Commonizer settings
|
||||||
private const val OPTIMISTIC_NUMBER_COMMONIZATION_ENABLED_ALIAS: String = "optimistic-numbers"
|
public 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
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,19 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.commonizer
|
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 {
|
internal object DefaultCommonizerSettings : CommonizerSettings {
|
||||||
override fun <T : Any> getSetting(key: CommonizerSettings.Key<T>): T {
|
override fun <T : Any> getSetting(key: CommonizerSettings.Key<T>): T {
|
||||||
return key.defaultValue
|
return key.defaultValue
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.commonizer.cli
|
package org.jetbrains.kotlin.commonizer.cli
|
||||||
|
|
||||||
internal class BooleanOptionType(
|
internal class BooleanOptionType(
|
||||||
alias: OptionAlias,
|
alias: String,
|
||||||
description: String,
|
description: String,
|
||||||
mandatory: Boolean
|
mandatory: Boolean
|
||||||
) : OptionType<Boolean>(alias, description, mandatory) {
|
) : OptionType<Boolean>(alias, description, mandatory) {
|
||||||
|
|||||||
+2
-3
@@ -8,11 +8,10 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
import org.jetbrains.kotlin.commonizer.CommonizerSettings
|
import org.jetbrains.kotlin.commonizer.CommonizerSettings
|
||||||
|
|
||||||
internal sealed class CommonizerSettingOptionType<T : Any>(
|
internal sealed class CommonizerSettingOptionType<T : Any>(
|
||||||
alias: OptionAlias,
|
val commonizerSettingKey: CommonizerSettings.Key<T>,
|
||||||
description: String,
|
description: String,
|
||||||
val commonizerSettingKey: CommonizerSettings.Key<T>
|
|
||||||
) : OptionType<T>(
|
) : OptionType<T>(
|
||||||
alias,
|
commonizerSettingKey.alias,
|
||||||
description,
|
description,
|
||||||
mandatory = false,
|
mandatory = false,
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.commonizer.parseCommonizerDependency
|
|||||||
|
|
||||||
internal abstract class DependenciesLibrariesSetOptionType(
|
internal abstract class DependenciesLibrariesSetOptionType(
|
||||||
mandatory: Boolean,
|
mandatory: Boolean,
|
||||||
alias: OptionAlias,
|
alias: String,
|
||||||
description: String
|
description: String
|
||||||
) : OptionType<List<CommonizerDependency>>(
|
) : OptionType<List<CommonizerDependency>>(
|
||||||
mandatory = mandatory,
|
mandatory = mandatory,
|
||||||
|
|||||||
+1
-1
@@ -7,6 +7,6 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
|
|
||||||
internal object DependencyLibrariesOptionType : DependenciesLibrariesSetOptionType(
|
internal object DependencyLibrariesOptionType : DependenciesLibrariesSetOptionType(
|
||||||
mandatory = false,
|
mandatory = false,
|
||||||
alias = DEPENDENCY_LIBRARIES_OPTION_ALIAS,
|
alias = DEPENDENCY_LIBRARIES_ALIAS,
|
||||||
description = "';' separated list of klib file paths that can be used as dependency"
|
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(
|
internal object InputLibrariesOptionType : LibrariesSetOptionType(
|
||||||
mandatory = true,
|
mandatory = true,
|
||||||
alias = INPUT_LIBRARIES_OPTION_ALIAS,
|
alias = INPUT_LIBRARIES_ALIAS,
|
||||||
description = "';' separated list of klib file paths that will get commonized"
|
description = "';' separated list of klib file paths that will get commonized"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.io.File
|
|||||||
|
|
||||||
internal abstract class LibrariesSetOptionType(
|
internal abstract class LibrariesSetOptionType(
|
||||||
mandatory: Boolean,
|
mandatory: Boolean,
|
||||||
alias: OptionAlias,
|
alias: String,
|
||||||
description: String
|
description: String
|
||||||
) : OptionType<List<File>>(
|
) : OptionType<List<File>>(
|
||||||
mandatory = mandatory,
|
mandatory = mandatory,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerLogLevel
|
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> {
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<CommonizerLogLevel> {
|
||||||
return when (rawValue.lowercase().trim()) {
|
return when (rawValue.lowercase().trim()) {
|
||||||
"quiet" -> Option(this, CommonizerLogLevel.Quiet)
|
"quiet" -> Option(this, CommonizerLogLevel.Quiet)
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
|
|
||||||
import java.io.File
|
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> {
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<File> {
|
||||||
val file = File(rawValue)
|
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
|
import org.jetbrains.kotlin.konan.target.KonanTarget.Companion.predefinedTargets
|
||||||
|
|
||||||
internal object NativeTargetsOptionType : OptionType<List<KonanTarget>>(
|
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>> {
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<List<KonanTarget>> {
|
||||||
val targetNames = rawValue.split(',')
|
val targetNames = rawValue.split(',')
|
||||||
|
|||||||
+1
-2
@@ -8,9 +8,8 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
import org.jetbrains.kotlin.commonizer.OptimisticNumberCommonizationEnabledKey
|
import org.jetbrains.kotlin.commonizer.OptimisticNumberCommonizationEnabledKey
|
||||||
|
|
||||||
internal object OptimisticNumberCommonizationOptionType : CommonizerSettingOptionType<Boolean>(
|
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,
|
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> =
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<Boolean> =
|
||||||
Option(this, parseBoolean(rawValue, onError))
|
Option(this, parseBoolean(rawValue, onError))
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.commonizer.cli
|
package org.jetbrains.kotlin.commonizer.cli
|
||||||
|
|
||||||
internal abstract class OptionType<T>(
|
internal abstract class OptionType<T>(
|
||||||
val alias: OptionAlias,
|
val alias: String,
|
||||||
val description: String,
|
val description: String,
|
||||||
val mandatory: Boolean = true
|
val mandatory: Boolean = true
|
||||||
) {
|
) {
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
|||||||
import org.jetbrains.kotlin.commonizer.parseCommonizerTarget
|
import org.jetbrains.kotlin.commonizer.parseCommonizerTarget
|
||||||
|
|
||||||
internal object OutputCommonizerTargetsOptionType : OptionType<Set<SharedCommonizerTarget>>(
|
internal object OutputCommonizerTargetsOptionType : OptionType<Set<SharedCommonizerTarget>>(
|
||||||
alias = OUTPUT_COMMONIZER_TARGET_OPTION_ALIAS,
|
alias = OUTPUT_COMMONIZER_TARGETS_ALIAS,
|
||||||
description = "All output targets separated with ';'",
|
description = "All output targets separated with ';'",
|
||||||
mandatory = true
|
mandatory = true
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
|
|
||||||
import java.io.File
|
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> {
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<File> {
|
||||||
val file = File(rawValue)
|
val file = File(rawValue)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.commonizer.cli
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.commonizer.stats.StatsType
|
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> {
|
override fun parse(rawValue: String, onError: (reason: String) -> Nothing): Option<StatsType> {
|
||||||
val value = StatsType.values().firstOrNull { it.name.equals(rawValue, ignoreCase = true) }
|
val value = StatsType.values().firstOrNull { it.name.equals(rawValue, ignoreCase = true) }
|
||||||
?: onError("Invalid stats type: $rawValue")
|
?: onError("Invalid stats type: $rawValue")
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ internal abstract class Task(private val options: Collection<Option<*>>) : Compa
|
|||||||
abstract fun execute(logPrefix: String = "")
|
abstract fun execute(logPrefix: String = "")
|
||||||
|
|
||||||
protected inline fun <reified T, reified O : OptionType<T>> getMandatory(nameFilter: (String) -> Boolean = { true }): T {
|
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)
|
check(option.type.mandatory)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@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? {
|
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)
|
if (option != null) check(!option.type.mandatory)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ internal enum class TaskType(
|
|||||||
NativeTargetsOptionType,
|
NativeTargetsOptionType,
|
||||||
OutputCommonizerTargetsOptionType,
|
OutputCommonizerTargetsOptionType,
|
||||||
BooleanOptionType(
|
BooleanOptionType(
|
||||||
COPY_STDLIB_OPTION_ALIAS,
|
COPY_STDLIB_ALIAS,
|
||||||
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
||||||
mandatory = false
|
mandatory = false
|
||||||
),
|
),
|
||||||
BooleanOptionType(
|
BooleanOptionType(
|
||||||
COPY_ENDORSED_LIBS_OPTION_ALIAS,
|
COPY_ENDORSED_LIBS_ALIAS,
|
||||||
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
"Boolean (default false);\nwhether to copy Kotlin/Native endorsed libraries to the destination",
|
||||||
mandatory = false
|
mandatory = false
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ private fun parseTask(
|
|||||||
tasks: MutableList<Task>
|
tasks: MutableList<Task>
|
||||||
): String? {
|
): String? {
|
||||||
val taskType = TaskType.getByAlias(taskAlias) ?: printUsageAndExit("Unknown task $taskAlias")
|
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<*>>()
|
val options = mutableMapOf<String, Option<*>>()
|
||||||
|
|
||||||
fun buildOngoingTask() {
|
fun buildOngoingTask() {
|
||||||
@@ -117,7 +117,7 @@ private fun printUsageAndExit(errorMessage: String? = null): Nothing {
|
|||||||
println(formatLeft(1, if (taskType.optionTypes.isNotEmpty()) "Options:" else "No options."))
|
println(formatLeft(1, if (taskType.optionTypes.isNotEmpty()) "Options:" else "No options."))
|
||||||
for (optionType in taskType.optionTypes) {
|
for (optionType in taskType.optionTypes) {
|
||||||
val lines = optionType.description.split('\n')
|
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)) }
|
lines.drop(1).forEach { println(StringBuilder().formatRight(it)) }
|
||||||
}
|
}
|
||||||
println()
|
println()
|
||||||
|
|||||||
Reference in New Issue
Block a user