Unify write() method and make it a member of KotlinClassMetadata
To make sure that the correct version and flags are preserved during metadata transformation, they are now stored inside KotlinClassMetadata. Such change also makes it possible to make write() a member function of KotlinClassMetadata, further simplifying API. Also, it allows tracking whether readStrict or readLenient was used to read metadata and prohibit writing accordingly. Also provide transform() method as a shortcut for readStrict+write. Related to: #KT-59441
This commit is contained in:
committed by
Space Team
parent
36703ff9ae
commit
f101e5a336
@@ -81,7 +81,7 @@ private fun compileAndPrintAllFiles(
|
||||
"class" -> {
|
||||
val metadata = kotlinp.readClassFile(outputFile)
|
||||
val classFile = KotlinClassMetadata.readStrict(metadata)
|
||||
val classFile2 = KotlinClassMetadata.readStrict(transformClassFileWithNodes(metadata, classFile))
|
||||
val classFile2 = KotlinClassMetadata.readStrict(classFile.write())
|
||||
|
||||
for ((sb, classFileToRender) in listOf(
|
||||
main to classFile, afterNodes to classFile2
|
||||
@@ -129,21 +129,6 @@ private fun StringBuilder.appendFileName(file: File) {
|
||||
appendLine("// ------------------------------------------")
|
||||
}
|
||||
|
||||
// Reads the class file and writes it back with KmClass/KmFunction/... elements.
|
||||
private fun transformClassFileWithNodes(metadata: Metadata, classFile: KotlinClassMetadata): Metadata =
|
||||
when (classFile) {
|
||||
is KotlinClassMetadata.Class ->
|
||||
KotlinClassMetadata.writeClass(classFile.kmClass)
|
||||
is KotlinClassMetadata.FileFacade ->
|
||||
KotlinClassMetadata.writeFileFacade(classFile.kmPackage)
|
||||
is KotlinClassMetadata.SyntheticClass ->
|
||||
classFile.kmLambda?.let { KotlinClassMetadata.writeLambda(it) } ?: KotlinClassMetadata.writeSyntheticClass()
|
||||
is KotlinClassMetadata.MultiFileClassPart ->
|
||||
KotlinClassMetadata.writeMultiFileClassPart(classFile.kmPackage, classFile.facadeClassName)
|
||||
is KotlinClassMetadata.MultiFileClassFacade -> KotlinClassMetadata.writeMultiFileClassFacade(classFile.partClassNames)
|
||||
is KotlinClassMetadata.Unknown -> metadata
|
||||
}
|
||||
|
||||
@OptIn(UnstableMetadataApi::class)
|
||||
private fun transformModuleFileWithNodes(moduleFile: KotlinModuleMetadata): ByteArray =
|
||||
KotlinModuleMetadata.write(moduleFile.kmModule)
|
||||
|
||||
Reference in New Issue
Block a user