[KLIB tool] Rename "signatures" to "dump-metadata-signatures"

To make KLIB tool command names more uniform.
This commit is contained in:
Dmitriy Dolovov
2023-10-13 11:41:44 +02:00
committed by Space Team
parent 8f141e5dc6
commit c34e334550
5 changed files with 41 additions and 18 deletions
@@ -152,7 +152,7 @@ open class CompareDistributionSignatures : DefaultTask() {
private fun getKlibSignatures(klib: File): List<String> {
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)
@@ -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)
}
}
@@ -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}")
@@ -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<String>) {
"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()
@@ -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")
}