[KLIB tool] Split KlibToolArguments to arguments & arguments parser
^KT-62340
This commit is contained in:
committed by
Space Team
parent
02ab472f0b
commit
4fe8885376
@@ -39,38 +39,25 @@ import java.io.File
|
|||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
import org.jetbrains.kotlin.konan.file.File as KFile
|
import org.jetbrains.kotlin.konan.file.File as KFile
|
||||||
|
|
||||||
internal class KlibToolArguments(args: Array<String>) {
|
internal class KlibToolArgumentsParser {
|
||||||
val commandName: String
|
fun parseArguments(rawArgs: Array<String>): KlibToolArguments {
|
||||||
val libraryNameOrPath: String
|
if (rawArgs.size < 2) {
|
||||||
|
|
||||||
val repository: String?
|
|
||||||
val printSignatures: Boolean
|
|
||||||
val signatureVersion: KotlinIrSignatureVersion?
|
|
||||||
|
|
||||||
init {
|
|
||||||
if (args.size < 2) {
|
|
||||||
printUsage()
|
printUsage()
|
||||||
exitProcess(0)
|
exitProcess(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
commandName = args[0]
|
val extraArgs: Map<ExtraOption, List<String>> = parseOptions(rawArgs.drop(2).toTypedArray<String>())
|
||||||
libraryNameOrPath = args[1]
|
|
||||||
|
|
||||||
val extraOptions: Map<ExtraOption, List<String>> = parseOptions(args.drop(2).toTypedArray<String>())
|
|
||||||
.entries
|
.entries
|
||||||
.mapNotNull { (option, values) ->
|
.mapNotNull { (option, values) ->
|
||||||
val knownOption = ExtraOption.parseOrNull(option)
|
val knownOption = ExtraOption.parseOrNull(option)
|
||||||
if (knownOption == null) {
|
if (knownOption == null) {
|
||||||
logWarning("Unrecognized command-line option: $option")
|
logWarning("Unrecognized command-line argument: $option")
|
||||||
return@mapNotNull null
|
return@mapNotNull null
|
||||||
}
|
}
|
||||||
knownOption to values
|
knownOption to values
|
||||||
}.toMap()
|
}.toMap()
|
||||||
|
|
||||||
repository = extraOptions[ExtraOption.REPOSITORY]?.last()
|
val signatureVersion = extraArgs[ExtraOption.SIGNATURE_VERSION]?.last()?.let { rawSignatureVersion ->
|
||||||
printSignatures = extraOptions[ExtraOption.PRINT_SIGNATURES]?.last()?.toBoolean() == true
|
|
||||||
|
|
||||||
signatureVersion = extraOptions[ExtraOption.SIGNATURE_VERSION]?.last()?.let { rawSignatureVersion ->
|
|
||||||
rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion)
|
rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion)
|
||||||
?: logError("Invalid signature version: $rawSignatureVersion")
|
?: logError("Invalid signature version: $rawSignatureVersion")
|
||||||
}
|
}
|
||||||
@@ -78,6 +65,14 @@ internal class KlibToolArguments(args: Array<String>) {
|
|||||||
if (signatureVersion != null && signatureVersion !in KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS)
|
if (signatureVersion != null && signatureVersion !in KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS)
|
||||||
logError("Unsupported signature version: ${signatureVersion.number}")
|
logError("Unsupported signature version: ${signatureVersion.number}")
|
||||||
|
|
||||||
|
|
||||||
|
return KlibToolArguments(
|
||||||
|
commandName = rawArgs[0],
|
||||||
|
libraryNameOrPath = rawArgs[1],
|
||||||
|
repository = extraArgs[ExtraOption.REPOSITORY]?.last(),
|
||||||
|
printSignatures = extraArgs[ExtraOption.PRINT_SIGNATURES]?.last()?.toBoolean() == true,
|
||||||
|
signatureVersion,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseOptions(args: Array<String>): Map<String, List<String>> {
|
private fun parseOptions(args: Array<String>): Map<String, List<String>> {
|
||||||
@@ -138,6 +133,15 @@ internal class KlibToolArguments(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class KlibToolArguments(
|
||||||
|
val commandName: String,
|
||||||
|
val libraryNameOrPath: String,
|
||||||
|
val repository: String?,
|
||||||
|
val printSignatures: Boolean,
|
||||||
|
val signatureVersion: KotlinIrSignatureVersion?,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
private enum class ExtraOption(val option: String) {
|
private enum class ExtraOption(val option: String) {
|
||||||
REPOSITORY("-repository"),
|
REPOSITORY("-repository"),
|
||||||
PRINT_SIGNATURES("-print-signatures"),
|
PRINT_SIGNATURES("-print-signatures"),
|
||||||
@@ -445,7 +449,7 @@ private fun libraryInRepoOrCurrentDir(repository: KFile, name: String) =
|
|||||||
resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name)
|
resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name)
|
||||||
|
|
||||||
fun main(rawArgs: Array<String>) {
|
fun main(rawArgs: Array<String>) {
|
||||||
val args = KlibToolArguments(rawArgs)
|
val args = KlibToolArgumentsParser().parseArguments(rawArgs)
|
||||||
val library = Library(args.libraryNameOrPath, args.repository)
|
val library = Library(args.libraryNameOrPath, args.repository)
|
||||||
|
|
||||||
when (args.commandName) {
|
when (args.commandName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user