diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DeclarationPrinter.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DeclarationPrinter.kt index 47ca7d66df6..9ec47067262 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DeclarationPrinter.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DeclarationPrinter.kt @@ -40,7 +40,7 @@ internal class DeclarationPrinter( private fun Printer.printPlain(header: String, signature: String? = null, suffix: String? = null) { if (signature != null) println(signature) - println(if (suffix != null ) header + suffix else header) + println(if (suffix != null) header + suffix else header) } private inner class PrinterVisitor : DeclarationDescriptorVisitorEmptyBodies() { diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DefaultKlibSignatureRenderer.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DefaultKlibSignatureRenderer.kt index f168d42ada5..e772fb62621 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DefaultKlibSignatureRenderer.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/DefaultKlibSignatureRenderer.kt @@ -5,15 +5,14 @@ import org.jetbrains.kotlin.backend.konan.serialization.KonanManglerDesc import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.ir.util.IdSignatureRenderer import org.jetbrains.kotlin.ir.util.render -import org.jetbrains.kotlin.library.KotlinIrSignatureVersion internal class DefaultKlibSignatureRenderer( - signatureVersion: KotlinIrSignatureVersion?, + private val individualSignatureRenderer: IdSignatureRenderer, private val prefix: String? = null, ) : KlibSignatureRenderer { private val idSignaturer = KonanIdSignaturer(KonanManglerDesc) - private val individualSignatureRenderer = signatureVersion.getMostSuitableSignatureRenderer() override fun render(descriptor: DeclarationDescriptor): String? { val idSignature = if (descriptor is ClassDescriptor && descriptor.kind == ClassKind.ENUM_ENTRY) { diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/IrSignaturesRenderer.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/IrSignaturesRenderer.kt index 7a0bd8f3014..131b8973681 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/IrSignaturesRenderer.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/IrSignaturesRenderer.kt @@ -6,11 +6,10 @@ package org.jetbrains.kotlin.cli.klib import org.jetbrains.kotlin.ir.util.IdSignature +import org.jetbrains.kotlin.ir.util.IdSignatureRenderer import org.jetbrains.kotlin.ir.util.render -import org.jetbrains.kotlin.library.KotlinIrSignatureVersion -internal class IrSignaturesRenderer(private val output: Appendable, signatureVersion: KotlinIrSignatureVersion?) { - private val individualSignatureRenderer = signatureVersion.getMostSuitableSignatureRenderer() +internal class IrSignaturesRenderer(private val output: Appendable, private val individualSignatureRenderer: IdSignatureRenderer) { fun render(signatures: IrSignaturesExtractor.Signatures) { header("Declared signatures: ${signatures.declaredSignatures.size}") diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/KlibToolArgumentsParser.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/KlibToolArgumentsParser.kt index 42de575d13c..81b1be8cf4f 100644 --- a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/KlibToolArgumentsParser.kt +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/KlibToolArgumentsParser.kt @@ -6,34 +6,37 @@ package org.jetbrains.kotlin.cli.klib import org.jetbrains.kotlin.library.KotlinIrSignatureVersion -import kotlin.system.exitProcess -internal class KlibToolArgumentsParser { - fun parseArguments(rawArgs: Array): KlibToolArguments { +internal class KlibToolArgumentsParser(private val output: KlibToolOutput) { + fun parseArguments(rawArgs: Array): KlibToolArguments? { if (rawArgs.size < 2) { printUsage() - exitProcess(0) + return null } val extraArgs: Map> = parseOptions(rawArgs.drop(2).toTypedArray()) - .entries - .mapNotNull { (option, values) -> + ?.entries + ?.mapNotNull { (option, values) -> val knownOption = ExtraOption.parseOrNull(option) if (knownOption == null) { - logWarning("Unrecognized command-line argument: $option") + output.logWarning("Unrecognized command-line argument: $option") return@mapNotNull null } knownOption to values - }.toMap() + }?.toMap() + ?: return null val signatureVersion = extraArgs[ExtraOption.SIGNATURE_VERSION]?.last()?.let { rawSignatureVersion -> - rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion) - ?: logError("Invalid signature version: $rawSignatureVersion") + rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion) ?: run { + output.logError("Invalid signature version: $rawSignatureVersion") + return null + } } - if (signatureVersion != null && signatureVersion !in KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS) - logError("Unsupported signature version: ${signatureVersion.number}") - + if (signatureVersion != null && signatureVersion !in KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS) { + output.logError("Unsupported signature version: ${signatureVersion.number}") + return null + } return KlibToolArguments( commandName = rawArgs[0], @@ -45,15 +48,17 @@ internal class KlibToolArgumentsParser { ) } - private fun parseOptions(args: Array): Map> { + private fun parseOptions(args: Array): Map>? { val options = mutableMapOf>() for (index in args.indices step 2) { val key = args[index] if (key[0] != '-') { - logError("Expected a flag with initial dash: $key") + output.logError("Expected a flag with initial dash: $key") + return null } if (index + 1 == args.size) { - logError("Expected an value after $key") + output.logError("Expected an value after $key") + return null } val value = listOf(args[index + 1]) options[key]?.addAll(value) ?: options.put(key, value.toMutableList()) @@ -62,7 +67,7 @@ internal class KlibToolArgumentsParser { } private fun printUsage() { - println( + output.stderr.appendLine( """ Usage: klib [