[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 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) declarations in the metadata and in IR may differ if compiler plugins (such as Compose)
were applied during library compilation. 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: and the options are:
-repository <path> [DEPRECATED] Usage of KLIB repositories will be dropped soon. See https://youtrack.jetbrains.com/issue/KT-61098 -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 Render IR signatures of a specific version. By default, the most up-to-date signature version
supported in the library is used. supported in the library is used.
-print-signatures {true|false} -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() """.trimIndent()
) )
} }
@@ -293,6 +294,11 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
} }
fun contents(output: Appendable, printSignatures: Boolean) { 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 module = loadModule()
val signatureRenderer = if (printSignatures) DefaultKlibSignatureRenderer("// Signature: ") else KlibSignatureRenderer.NO_SIGNATURE val signatureRenderer = if (printSignatures) DefaultKlibSignatureRenderer("// Signature: ") else KlibSignatureRenderer.NO_SIGNATURE
val printer = DeclarationPrinter(output, DefaultDeclarationHeaderRenderer, signatureRenderer) val printer = DeclarationPrinter(output, DefaultDeclarationHeaderRenderer, signatureRenderer)
@@ -301,7 +307,7 @@ class Library(val libraryNameOrPath: String, val requestedRepository: String?) {
} }
fun signatures(output: Appendable) { 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 module = loadModule()
val printer = SignaturePrinter(output, DefaultKlibSignatureRenderer()) val printer = SignaturePrinter(output, DefaultKlibSignatureRenderer())
@@ -380,6 +386,7 @@ fun main(args: Array<String>) {
when (command.verb) { when (command.verb) {
"dump-ir" -> library.ir(System.out, printSignatures) "dump-ir" -> library.ir(System.out, printSignatures)
"dump-ir-signatures" -> library.dumpIrSignatures(System.out, signatureVersion) "dump-ir-signatures" -> library.dumpIrSignatures(System.out, signatureVersion)
"dump-metadata" -> library.dumpMetadata(System.out, printSignatures)
"contents" -> library.contents(System.out, printSignatures) "contents" -> library.contents(System.out, printSignatures)
"signatures" -> library.signatures(System.out) "signatures" -> library.signatures(System.out)
"info" -> library.info() "info" -> library.info()
@@ -12,21 +12,21 @@ import org.jetbrains.kotlin.konan.target.Distribution
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import java.nio.file.Paths import java.nio.file.Paths
class ContentsTest { class DumpMetadataTest {
private fun testLibrary(name: String) = LIBRARY_DIRECTORY.resolve("$name.klib").toFile().absolutePath 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 output = StringBuilder()
val lib = Library(library, null) val lib = Library(library, null)
lib.contents(output, false) lib.dumpMetadata(output, false)
if (printOutput) { if (printOutput) {
println(output.trim().toString()) println(output.trim().toString())
} }
assertEquals( assertEquals(
StringUtil.convertLineSeparators(expected()), StringUtil.convertLineSeparators(expected()),
StringUtil.convertLineSeparators(output.trim().toString()), 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`() { fun `Stdlib content should be printed without exceptions`() {
val output = StringBuilder() val output = StringBuilder()
val distributionPath = System.getProperty("konan.home") val distributionPath = System.getProperty("konan.home")
Library(Distribution(distributionPath).stdlib, null).contents(output, false) Library(Distribution(distributionPath).stdlib, null).dumpMetadata(output, false)
} }
@Test @Test
fun topLevelFunctions() = klibContents(testLibrary("TopLevelFunctions")) { fun topLevelFunctions() = dumpMetadata(testLibrary("TopLevelFunctions")) {
""" """
package <root> { package <root> {
annotation class A constructor() : Annotation annotation class A constructor() : Annotation
@@ -65,7 +65,7 @@ class ContentsTest {
} }
@Test @Test
fun constructors() = klibContents(testLibrary("Constructors")) { fun constructors() = dumpMetadata(testLibrary("Constructors")) {
""" """
package <root> { package <root> {
annotation class A constructor() : Annotation annotation class A constructor() : Annotation
@@ -95,7 +95,7 @@ class ContentsTest {
} }
@Test @Test
fun objects() = klibContents(testLibrary("Objects")) { fun objects() = dumpMetadata(testLibrary("Objects")) {
""" """
package <root> { package <root> {
@@ -128,7 +128,7 @@ class ContentsTest {
} }
@Test @Test
fun classes() = klibContents(testLibrary("Classes")) { fun classes() = dumpMetadata(testLibrary("Classes")) {
""" """
package <root> { package <root> {
@@ -193,7 +193,7 @@ class ContentsTest {
} }
@Test @Test
fun methodModality() = klibContents(testLibrary("MethodModality")) { fun methodModality() = dumpMetadata(testLibrary("MethodModality")) {
""" """
package <root> { package <root> {
@@ -223,7 +223,7 @@ class ContentsTest {
} }
@Test @Test
fun functionModifiers() = klibContents(testLibrary("FunctionModifiers")) { fun functionModifiers() = dumpMetadata(testLibrary("FunctionModifiers")) {
""" """
package <root> { package <root> {
@@ -242,7 +242,7 @@ class ContentsTest {
@Test @Test
// TODO: Support enum entry methods in serialization/deserialization. // TODO: Support enum entry methods in serialization/deserialization.
fun enum() = klibContents(testLibrary("Enum")) { fun enum() = dumpMetadata(testLibrary("Enum")) {
""" """
package <root> { package <root> {
@@ -262,7 +262,7 @@ class ContentsTest {
@Test @Test
// TODO: Support getter/setter annotations in serialization/deserialization. // TODO: Support getter/setter annotations in serialization/deserialization.
fun accessors() = klibContents(testLibrary("Accessors")) { fun accessors() = dumpMetadata(testLibrary("Accessors")) {
""" """
package custom.pkg { package custom.pkg {
annotation class A constructor() : Annotation annotation class A constructor() : Annotation
@@ -287,7 +287,7 @@ class ContentsTest {
} }
@Test @Test
fun topLevelPropertiesCustomPackage() = klibContents(testLibrary("TopLevelPropertiesCustomPackage")) { fun topLevelPropertiesCustomPackage() = dumpMetadata(testLibrary("TopLevelPropertiesCustomPackage")) {
""" """
package custom.pkg { package custom.pkg {
typealias MyTransformer = (String) -> Int typealias MyTransformer = (String) -> Int
@@ -300,7 +300,7 @@ class ContentsTest {
} }
@Test @Test
fun topLevelPropertiesRootPackage() = klibContents(testLibrary("TopLevelPropertiesRootPackage")) { fun topLevelPropertiesRootPackage() = dumpMetadata(testLibrary("TopLevelPropertiesRootPackage")) {
""" """
package <root> { package <root> {
typealias MyTransformer = (String) -> Int typealias MyTransformer = (String) -> Int
@@ -313,7 +313,7 @@ class ContentsTest {
} }
@Test @Test
fun topLevelPropertiesWithClassesCustomPackage() = klibContents(testLibrary("TopLevelPropertiesWithClassesCustomPackage")) { fun topLevelPropertiesWithClassesCustomPackage() = dumpMetadata(testLibrary("TopLevelPropertiesWithClassesCustomPackage")) {
""" """
package custom.pkg { package custom.pkg {
object Bar object Bar
@@ -328,7 +328,7 @@ class ContentsTest {
} }
@Test @Test
fun topLevelPropertiesWithClassesRootPackage() = klibContents(testLibrary("TopLevelPropertiesWithClassesRootPackage")) { fun topLevelPropertiesWithClassesRootPackage() = dumpMetadata(testLibrary("TopLevelPropertiesWithClassesRootPackage")) {
""" """
package <root> { package <root> {
object Bar 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_FILE_NAME
import org.jetbrains.kotlin.konan.test.blackbox.support.util.DEFAULT_MODULE_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.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.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals
import org.junit.jupiter.api.Assumptions import org.junit.jupiter.api.Assumptions
import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Tag
@@ -39,18 +39,18 @@ abstract class AbstractNativeCInteropKT39120Test : AbstractNativeCInteropBaseTes
val includeFrameworkArgs = TestCompilerArgs("-compiler-option", "-F${testDataDir.canonicalPath}") val includeFrameworkArgs = TestCompilerArgs("-compiler-option", "-F${testDataDir.canonicalPath}")
val klib1: KLIB = cinteropToLibrary(targets, def1File, buildDir, includeFrameworkArgs).assertSuccess().resultingArtifact 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 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)) assertEquals(StringUtilRt.convertLineSeparators(expectedFiltered1Output), StringUtilRt.convertLineSeparators(actualFiltered1Output))
val cinterop2ExtraArgs = TestCompilerArgs("-l", klib1.klibFile.canonicalPath, "-compiler-option", "-fmodules") val cinterop2ExtraArgs = TestCompilerArgs("-l", klib1.klibFile.canonicalPath, "-compiler-option", "-fmodules")
val klib2: KLIB = cinteropToLibrary(targets, def2File, buildDir, includeFrameworkArgs + cinterop2ExtraArgs).assertSuccess().resultingArtifact 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 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)) assertEquals(StringUtilRt.convertLineSeparators(expectedFiltered2Output), StringUtilRt.convertLineSeparators(actualFiltered2Output))
val ktFile = testPathFull.resolve(DEFAULT_FILE_NAME) 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
import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult.Companion.assertSuccess 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.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.konan.util.CInteropHints
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue
@@ -103,7 +103,7 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() {
"Test failed. CInterop compilation result was: $testCompilationResult" "Test failed. CInterop compilation result was: $testCompilationResult"
} }
} else { } else {
val klibContents = testCompilationResult.assertSuccess().resultingArtifact.getContents(kotlinNativeClassLoader.classLoader) val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
.let { .let {
if (ignoreExperimentalForeignApi) { if (ignoreExperimentalForeignApi) {
it.replace("@ExperimentalForeignApi ", "") it.replace("@ExperimentalForeignApi ", "")
@@ -112,7 +112,7 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() {
} }
} }
val expectedContents = goldenFile.readText() 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" "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.KotlinNativeClassLoader
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts 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.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.jetbrains.kotlin.test.services.JUnit5Assertions.assertEqualsToFile
import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Tag
import java.io.File import java.io.File
@@ -33,9 +33,9 @@ abstract class AbstractNativeKlibDumpMetadataTest : AbstractNativeSimpleTest() {
val testCompilationResult: TestCompilationResult.Success<out KLIB> = compileToLibrary(testCase) val testCompilationResult: TestCompilationResult.Success<out KLIB> = compileToLibrary(testCase)
val kotlinNativeClassLoader = testRunSettings.get<KotlinNativeClassLoader>() val kotlinNativeClassLoader = testRunSettings.get<KotlinNativeClassLoader>()
val klibContents = testCompilationResult.assertSuccess().resultingArtifact.getContents(kotlinNativeClassLoader.classLoader) val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
val klibContentsFiltered = filterContentsOutput(klibContents, linestoExclude = listOf("package test {", "}", "")) val metadataFiltered = filterContentsOutput(metadata, linestoExclude = listOf("package test {", "}", ""))
assertEqualsToFile(File("${testPathFull.canonicalPath.substringBeforeLast(".")}.txt"), StringUtilRt.convertLineSeparators(klibContentsFiltered)) assertEqualsToFile(File("${testPathFull.canonicalPath.substringBeforeLast(".")}.txt"), StringUtilRt.convertLineSeparators(metadataFiltered))
} }
private fun generateTestCaseWithSingleSource(source: File, extraArgs: List<String>): TestCase { 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 { internal fun TestCompilationArtifact.KLIB.dumpMetadata(kotlinNativeClassLoader: ClassLoader): String {
return invokeKlibTool(kotlinNativeClassLoader, klibFile, "contents", false) return invokeKlibTool(kotlinNativeClassLoader, klibFile, "dumpMetadata", /* printSignatures= */ false)
} }
internal fun TestCompilationArtifact.KLIB.getIr( internal fun TestCompilationArtifact.KLIB.getIr(