From c34e3345509514d14ebc306613796824f22de691 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Fri, 13 Oct 2023 11:41:44 +0200 Subject: [PATCH] [KLIB tool] Rename "signatures" to "dump-metadata-signatures" To make KLIB tool command names more uniform. --- .../kotlin/CompareDistributionSignatures.kt | 2 +- .../cli/klib/DefaultKlibSignatureRenderer.kt | 11 ++++++--- .../kotlin/cli/klib/IrSignaturesRenderer.kt | 7 +----- .../org/jetbrains/kotlin/cli/klib/main.kt | 24 ++++++++++++------- .../kotlin/cli/klib/signatureUtils.kt | 15 ++++++++++++ 5 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/signatureUtils.kt diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt index 9936b657eb6..3c0f5a5e972 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/CompareDistributionSignatures.kt @@ -152,7 +152,7 @@ open class CompareDistributionSignatures : DefaultTask() { private fun getKlibSignatures(klib: File): List { val tool = if (HostManager.hostIsMingw) "klib.bat" else "klib" val klibTool = File("$newDistribution/bin/$tool").absolutePath - val args = listOf("signatures", klib.absolutePath) + val args = listOf("dump-metadata-signatures", klib.absolutePath, "-signature-version", "1") val output = runProcess(localExecutor(project), klibTool, args) if (output.exitCode != 0) { logger.error(output.stdErr) 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 089db974215..f168d42ada5 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 @@ -6,9 +6,14 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.util.render +import org.jetbrains.kotlin.library.KotlinIrSignatureVersion -internal class DefaultKlibSignatureRenderer(private val prefix: String? = null) : KlibSignatureRenderer { +internal class DefaultKlibSignatureRenderer( + signatureVersion: KotlinIrSignatureVersion?, + 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) { @@ -18,8 +23,8 @@ internal class DefaultKlibSignatureRenderer(private val prefix: String? = null) } ?: return null return if (prefix != null) - prefix + idSignature.render() + prefix + idSignature.render(individualSignatureRenderer) else - idSignature.render() + idSignature.render(individualSignatureRenderer) } } 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 5b027a6c172..7a0bd8f3014 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,16 +6,11 @@ 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 = when (signatureVersion) { - KotlinIrSignatureVersion.V1 -> IdSignatureRenderer.LEGACY - null, KotlinIrSignatureVersion.V2 -> IdSignatureRenderer.DEFAULT - else -> error("Unsupported signature version: ${signatureVersion.number}") - } + private val individualSignatureRenderer = signatureVersion.getMostSuitableSignatureRenderer() 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/main.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/main.kt index e3da7cdcfe2..ce96a589d72 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 @@ -67,13 +67,13 @@ fun printUsage() { command is intended to be used for debugging purposes only. dump-ir-signatures Dump IR signatures of all public declarations in the library and all public declarations consumed by this library (as two separate lists). This command relies purely on the data in IR. - signatures [DEPRECATED] Please, use "dump-ir-signatures" instead. - Dump IR signatures of all public declarations in the library. Note, that this command renders + dump-metadata-signatures Dump IR signatures of all public declarations in the library. Note, that this command renders the signatures based on the library metadata. This is different from "dump-ir-signatures", which renders signatures based on the IR. On practice, in most cases there is no difference between output of these two commands. However, if IR transforming compiler plugins (such as Compose) were used during compilation of the library, there would be different signatures for patched declarations. + signatures [DEPRECATED] Renamed to "dump-metadata-signatures". Please, use new command name. dump-metadata Dump the metadata of all public declarations in the library in the form of Kotlin-alike code. The output of this command is intended to be used for debugging purposes only. contents [DEPRECATED] Renamed to "dump-metadata". Please, use new command name. @@ -297,23 +297,30 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) { } fun contents(output: Appendable, printSignatures: Boolean) { - logWarning("\"contents\" has been renamed to \"dump-metadata\"") + logWarning("\"contents\" has been renamed to \"dump-metadata\". Please, use new command name.") dumpMetadata(output, printSignatures) } fun dumpMetadata(output: Appendable, printSignatures: Boolean) { val module = loadModule() - val signatureRenderer = if (printSignatures) DefaultKlibSignatureRenderer("// Signature: ") else KlibSignatureRenderer.NO_SIGNATURE + val signatureRenderer = if (printSignatures) + DefaultKlibSignatureRenderer(KotlinIrSignatureVersion.V1, "// Signature: ") // TODO: use the version from `-signature-version` + else + KlibSignatureRenderer.NO_SIGNATURE val printer = DeclarationPrinter(output, DefaultDeclarationHeaderRenderer, signatureRenderer) printer.print(module) } - fun signatures(output: Appendable) { - logWarning("\"signatures\" is deprecated. Please, use \"dump-ir-signatures\" instead") + fun signatures(output: Appendable, signatureVersion: KotlinIrSignatureVersion?) { + logWarning("\"signatures\" has been renamed to \"dump-metadata-signatures\". Please, use new command name.") + dumpMetadataSignatures(output, signatureVersion) + } + fun dumpMetadataSignatures(output: Appendable, signatureVersion: KotlinIrSignatureVersion?) { val module = loadModule() - val printer = SignaturePrinter(output, DefaultKlibSignatureRenderer()) + // Don't call `checkSupportedInLibrary()` - the signatures are anyway generated on the fly. + val printer = SignaturePrinter(output, DefaultKlibSignatureRenderer(signatureVersion)) printer.print(module) } @@ -390,8 +397,9 @@ fun main(args: Array) { "dump-ir" -> library.dumpIr(System.out, printSignatures) "dump-ir-signatures" -> library.dumpIrSignatures(System.out, signatureVersion) "dump-metadata" -> library.dumpMetadata(System.out, printSignatures) + "dump-metadata-signatures" -> library.dumpMetadataSignatures(System.out, signatureVersion) "contents" -> library.contents(System.out, printSignatures) - "signatures" -> library.signatures(System.out) + "signatures" -> library.signatures(System.out, signatureVersion) "info" -> library.info() "install" -> library.install() "remove" -> library.remove() diff --git a/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/signatureUtils.kt b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/signatureUtils.kt new file mode 100644 index 00000000000..33487d21eec --- /dev/null +++ b/kotlin-native/klib/src/main/kotlin/org/jetbrains/kotlin/cli/klib/signatureUtils.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2010-2023 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.cli.klib + +import org.jetbrains.kotlin.ir.util.IdSignatureRenderer +import org.jetbrains.kotlin.library.KotlinIrSignatureVersion + +internal fun KotlinIrSignatureVersion?.getMostSuitableSignatureRenderer() = when (this) { + KotlinIrSignatureVersion.V1 -> IdSignatureRenderer.LEGACY + null, KotlinIrSignatureVersion.V2 -> IdSignatureRenderer.DEFAULT + else -> error("Unsupported signature version: $number") +}