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

To make KLIB tool command names more uniform.
This commit is contained in:
Dmitriy Dolovov
2023-10-05 13:47:21 +02:00
committed by Space Team
parent d8d95fdf4b
commit 02f52371c1
6 changed files with 41 additions and 34 deletions
@@ -72,7 +72,8 @@ fun printUsage() {
Note that this command renders the signatures from the metadata. Signatures for certain
declarations in the metadata and in IR may differ if compiler plugins (such as Compose)
were applied during library compilation.
contents Dump the metadata of all public declarations in the library in the form of Kotlin-alike code
dump-metadata Dump the metadata of all public declarations in the library in the form of Kotlin-alike code
contents [DEPRECATED] Renamed to "dump-metadata". Please, use new command name
and the options are:
-repository <path> [DEPRECATED] Usage of KLIB repositories will be dropped soon. See https://youtrack.jetbrains.com/issue/KT-61098
@@ -81,7 +82,7 @@ fun printUsage() {
Render IR signatures of a specific version. By default, the most up-to-date signature version
supported in the library is used.
-print-signatures {true|false}
Print IR signature for every declaration (only for "contents" and "dump-ir" commands)
Print IR signature for every declaration (only for "dump-metadata" and "dump-ir" commands)
""".trimIndent()
)
}
@@ -293,6 +294,11 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
}
fun contents(output: Appendable, printSignatures: Boolean) {
logWarning("\"contents\" has been renamed to \"dump-metadata\"")
dumpMetadata(output, printSignatures)
}
fun dumpMetadata(output: Appendable, printSignatures: Boolean) {
val module = loadModule()
val signatureRenderer = if (printSignatures) DefaultKlibSignatureRenderer("// Signature: ") else KlibSignatureRenderer.NO_SIGNATURE
val printer = DeclarationPrinter(output, DefaultDeclarationHeaderRenderer, signatureRenderer)
@@ -301,7 +307,7 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
}
fun signatures(output: Appendable) {
logWarning("\"signatures\" is deprecated. Please, use \"dump-ir-signatures\" instead\n")
logWarning("\"signatures\" is deprecated. Please, use \"dump-ir-signatures\" instead")
val module = loadModule()
val printer = SignaturePrinter(output, DefaultKlibSignatureRenderer())
@@ -380,6 +386,7 @@ fun main(args: Array<String>) {
when (command.verb) {
"dump-ir" -> library.ir(System.out, printSignatures)
"dump-ir-signatures" -> library.dumpIrSignatures(System.out, signatureVersion)
"dump-metadata" -> library.dumpMetadata(System.out, printSignatures)
"contents" -> library.contents(System.out, printSignatures)
"signatures" -> library.signatures(System.out)
"info" -> library.info()
@@ -12,21 +12,21 @@ import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.HostManager
import java.nio.file.Paths
class ContentsTest {
class DumpMetadataTest {
private fun testLibrary(name: String) = LIBRARY_DIRECTORY.resolve("$name.klib").toFile().absolutePath
private fun klibContents(library: String, printOutput: Boolean = false, expected: () -> String) {
private fun dumpMetadata(library: String, printOutput: Boolean = false, expected: () -> String) {
val output = StringBuilder()
val lib = Library(library, null)
lib.contents(output, false)
lib.dumpMetadata(output, false)
if (printOutput) {
println(output.trim().toString())
}
assertEquals(
StringUtil.convertLineSeparators(expected()),
StringUtil.convertLineSeparators(output.trim().toString()),
"klib contents test failed for library: $library"
"klib \"dump-metadata\" test failed for library: $library"
)
}
@@ -34,11 +34,11 @@ class ContentsTest {
fun `Stdlib content should be printed without exceptions`() {
val output = StringBuilder()
val distributionPath = System.getProperty("konan.home")
Library(Distribution(distributionPath).stdlib, null).contents(output, false)
Library(Distribution(distributionPath).stdlib, null).dumpMetadata(output, false)
}
@Test
fun topLevelFunctions() = klibContents(testLibrary("TopLevelFunctions")) {
fun topLevelFunctions() = dumpMetadata(testLibrary("TopLevelFunctions")) {
"""
package <root> {
annotation class A constructor() : Annotation
@@ -65,7 +65,7 @@ class ContentsTest {
}
@Test
fun constructors() = klibContents(testLibrary("Constructors")) {
fun constructors() = dumpMetadata(testLibrary("Constructors")) {
"""
package <root> {
annotation class A constructor() : Annotation
@@ -95,7 +95,7 @@ class ContentsTest {
}
@Test
fun objects() = klibContents(testLibrary("Objects")) {
fun objects() = dumpMetadata(testLibrary("Objects")) {
"""
package <root> {
@@ -128,7 +128,7 @@ class ContentsTest {
}
@Test
fun classes() = klibContents(testLibrary("Classes")) {
fun classes() = dumpMetadata(testLibrary("Classes")) {
"""
package <root> {
@@ -193,7 +193,7 @@ class ContentsTest {
}
@Test
fun methodModality() = klibContents(testLibrary("MethodModality")) {
fun methodModality() = dumpMetadata(testLibrary("MethodModality")) {
"""
package <root> {
@@ -223,7 +223,7 @@ class ContentsTest {
}
@Test
fun functionModifiers() = klibContents(testLibrary("FunctionModifiers")) {
fun functionModifiers() = dumpMetadata(testLibrary("FunctionModifiers")) {
"""
package <root> {
@@ -242,7 +242,7 @@ class ContentsTest {
@Test
// TODO: Support enum entry methods in serialization/deserialization.
fun enum() = klibContents(testLibrary("Enum")) {
fun enum() = dumpMetadata(testLibrary("Enum")) {
"""
package <root> {
@@ -262,7 +262,7 @@ class ContentsTest {
@Test
// TODO: Support getter/setter annotations in serialization/deserialization.
fun accessors() = klibContents(testLibrary("Accessors")) {
fun accessors() = dumpMetadata(testLibrary("Accessors")) {
"""
package custom.pkg {
annotation class A constructor() : Annotation
@@ -287,7 +287,7 @@ class ContentsTest {
}
@Test
fun topLevelPropertiesCustomPackage() = klibContents(testLibrary("TopLevelPropertiesCustomPackage")) {
fun topLevelPropertiesCustomPackage() = dumpMetadata(testLibrary("TopLevelPropertiesCustomPackage")) {
"""
package custom.pkg {
typealias MyTransformer = (String) -> Int
@@ -300,7 +300,7 @@ class ContentsTest {
}
@Test
fun topLevelPropertiesRootPackage() = klibContents(testLibrary("TopLevelPropertiesRootPackage")) {
fun topLevelPropertiesRootPackage() = dumpMetadata(testLibrary("TopLevelPropertiesRootPackage")) {
"""
package <root> {
typealias MyTransformer = (String) -> Int
@@ -313,7 +313,7 @@ class ContentsTest {
}
@Test
fun topLevelPropertiesWithClassesCustomPackage() = klibContents(testLibrary("TopLevelPropertiesWithClassesCustomPackage")) {
fun topLevelPropertiesWithClassesCustomPackage() = dumpMetadata(testLibrary("TopLevelPropertiesWithClassesCustomPackage")) {
"""
package custom.pkg {
object Bar
@@ -328,7 +328,7 @@ class ContentsTest {
}
@Test
fun topLevelPropertiesWithClassesRootPackage() = klibContents(testLibrary("TopLevelPropertiesWithClassesRootPackage")) {
fun topLevelPropertiesWithClassesRootPackage() = dumpMetadata(testLibrary("TopLevelPropertiesWithClassesRootPackage")) {
"""
package <root> {
object Bar
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
import org.jetbrains.kotlin.konan.test.blackbox.support.util.DEFAULT_FILE_NAME
import org.jetbrains.kotlin.konan.test.blackbox.support.util.DEFAULT_MODULE_NAME
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getContents
import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpMetadata
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals
import org.junit.jupiter.api.Assumptions
import org.junit.jupiter.api.Tag
@@ -39,18 +39,18 @@ abstract class AbstractNativeCInteropKT39120Test : AbstractNativeCInteropBaseTes
val includeFrameworkArgs = TestCompilerArgs("-compiler-option", "-F${testDataDir.canonicalPath}")
val klib1: KLIB = cinteropToLibrary(targets, def1File, buildDir, includeFrameworkArgs).assertSuccess().resultingArtifact
val contents1 = klib1.getContents(kotlinNativeClassLoader.classLoader)
val metadata1 = klib1.dumpMetadata(kotlinNativeClassLoader.classLoader)
val expectedFiltered1Output = golden1File.readText()
val actualFiltered1Output = filterContentsOutput(contents1, " pod.Version|POD|class Pod")
val actualFiltered1Output = filterContentsOutput(metadata1, " pod.Version|POD|class Pod")
assertEquals(StringUtilRt.convertLineSeparators(expectedFiltered1Output), StringUtilRt.convertLineSeparators(actualFiltered1Output))
val cinterop2ExtraArgs = TestCompilerArgs("-l", klib1.klibFile.canonicalPath, "-compiler-option", "-fmodules")
val klib2: KLIB = cinteropToLibrary(targets, def2File, buildDir, includeFrameworkArgs + cinterop2ExtraArgs).assertSuccess().resultingArtifact
val contents2 = klib2.getContents(kotlinNativeClassLoader.classLoader)
val metadata2 = klib2.dumpMetadata(kotlinNativeClassLoader.classLoader)
val expectedFiltered2Output = golden2File.readText()
val actualFiltered2Output = filterContentsOutput(contents2, " pod.Version|POD|class Pod")
val actualFiltered2Output = filterContentsOutput(metadata2, " pod.Version|POD|class Pod")
assertEquals(StringUtilRt.convertLineSeparators(expectedFiltered2Output), StringUtilRt.convertLineSeparators(actualFiltered2Output))
val ktFile = testPathFull.resolve(DEFAULT_FILE_NAME)
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.TestCompilerArgs
import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult
import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult.Companion.assertSuccess
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getContents
import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpMetadata
import org.jetbrains.kotlin.konan.util.CInteropHints
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue
@@ -103,7 +103,7 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() {
"Test failed. CInterop compilation result was: $testCompilationResult"
}
} else {
val klibContents = testCompilationResult.assertSuccess().resultingArtifact.getContents(kotlinNativeClassLoader.classLoader)
val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
.let {
if (ignoreExperimentalForeignApi) {
it.replace("@ExperimentalForeignApi ", "")
@@ -112,7 +112,7 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() {
}
}
val expectedContents = goldenFile.readText()
assertEquals(StringUtilRt.convertLineSeparators(expectedContents), StringUtilRt.convertLineSeparators(klibContents)) {
assertEquals(StringUtilRt.convertLineSeparators(expectedContents), StringUtilRt.convertLineSeparators(metadata)) {
"Test failed. CInterop compilation result was: $testCompilationResult"
}
}
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeClassLoader
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getContents
import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpMetadata
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEqualsToFile
import org.junit.jupiter.api.Tag
import java.io.File
@@ -33,9 +33,9 @@ abstract class AbstractNativeKlibDumpMetadataTest : AbstractNativeSimpleTest() {
val testCompilationResult: TestCompilationResult.Success<out KLIB> = compileToLibrary(testCase)
val kotlinNativeClassLoader = testRunSettings.get<KotlinNativeClassLoader>()
val klibContents = testCompilationResult.assertSuccess().resultingArtifact.getContents(kotlinNativeClassLoader.classLoader)
val klibContentsFiltered = filterContentsOutput(klibContents, linestoExclude = listOf("package test {", "}", ""))
assertEqualsToFile(File("${testPathFull.canonicalPath.substringBeforeLast(".")}.txt"), StringUtilRt.convertLineSeparators(klibContentsFiltered))
val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
val metadataFiltered = filterContentsOutput(metadata, linestoExclude = listOf("package test {", "}", ""))
assertEqualsToFile(File("${testPathFull.canonicalPath.substringBeforeLast(".")}.txt"), StringUtilRt.convertLineSeparators(metadataFiltered))
}
private fun generateTestCaseWithSingleSource(source: File, extraArgs: List<String>): TestCase {
@@ -20,8 +20,8 @@ private fun invokeKlibTool(kotlinNativeClassLoader: ClassLoader, klibFile: File,
}
internal fun TestCompilationArtifact.KLIB.getContents(kotlinNativeClassLoader: ClassLoader): String {
return invokeKlibTool(kotlinNativeClassLoader, klibFile, "contents", false)
internal fun TestCompilationArtifact.KLIB.dumpMetadata(kotlinNativeClassLoader: ClassLoader): String {
return invokeKlibTool(kotlinNativeClassLoader, klibFile, "dumpMetadata", /* printSignatures= */ false)
}
internal fun TestCompilationArtifact.KLIB.getIr(