From 4fe88853763947c1ad3bddcb929d7b1d8ce3db34 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 16 Feb 2024 15:30:41 +0100 Subject: [PATCH] [KLIB tool] Split `KlibToolArguments` to arguments & arguments parser ^KT-62340 --- .../org/jetbrains/kotlin/cli/klib/main.kt | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt index 0bf9d3bc42f..2e05405fb1b 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt @@ -39,38 +39,25 @@ import java.io.File import kotlin.system.exitProcess import org.jetbrains.kotlin.konan.file.File as KFile -internal class KlibToolArguments(args: Array) { - val commandName: String - val libraryNameOrPath: String - - val repository: String? - val printSignatures: Boolean - val signatureVersion: KotlinIrSignatureVersion? - - init { - if (args.size < 2) { +internal class KlibToolArgumentsParser { + fun parseArguments(rawArgs: Array): KlibToolArguments { + if (rawArgs.size < 2) { printUsage() exitProcess(0) } - commandName = args[0] - libraryNameOrPath = args[1] - - val extraOptions: Map> = parseOptions(args.drop(2).toTypedArray()) + val extraArgs: Map> = parseOptions(rawArgs.drop(2).toTypedArray()) .entries .mapNotNull { (option, values) -> val knownOption = ExtraOption.parseOrNull(option) if (knownOption == null) { - logWarning("Unrecognized command-line option: $option") + logWarning("Unrecognized command-line argument: $option") return@mapNotNull null } knownOption to values }.toMap() - repository = extraOptions[ExtraOption.REPOSITORY]?.last() - printSignatures = extraOptions[ExtraOption.PRINT_SIGNATURES]?.last()?.toBoolean() == true - - signatureVersion = extraOptions[ExtraOption.SIGNATURE_VERSION]?.last()?.let { rawSignatureVersion -> + val signatureVersion = extraArgs[ExtraOption.SIGNATURE_VERSION]?.last()?.let { rawSignatureVersion -> rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion) ?: logError("Invalid signature version: $rawSignatureVersion") } @@ -78,6 +65,14 @@ internal class KlibToolArguments(args: Array) { if (signatureVersion != null && signatureVersion !in KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS) 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): Map> { @@ -138,6 +133,15 @@ internal class KlibToolArguments(args: Array) { } } +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) { REPOSITORY("-repository"), PRINT_SIGNATURES("-print-signatures"), @@ -445,7 +449,7 @@ private fun libraryInRepoOrCurrentDir(repository: KFile, name: String) = resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name) fun main(rawArgs: Array) { - val args = KlibToolArguments(rawArgs) + val args = KlibToolArgumentsParser().parseArguments(rawArgs) val library = Library(args.libraryNameOrPath, args.repository) when (args.commandName) {