jvm-abi-gen: Update metadata version if needed
This commit is contained in:
committed by
Alexander Udalov
parent
1b5214a2dc
commit
4a59af3b8b
@@ -20,21 +20,25 @@ import org.jetbrains.org.objectweb.asm.Opcodes
|
|||||||
*/
|
*/
|
||||||
fun abiMetadataProcessor(internalName: String, publicClasses: Set<String>, annotationVisitor: AnnotationVisitor): AnnotationVisitor =
|
fun abiMetadataProcessor(internalName: String, publicClasses: Set<String>, annotationVisitor: AnnotationVisitor): AnnotationVisitor =
|
||||||
kotlinClassHeaderVisitor { header ->
|
kotlinClassHeaderVisitor { header ->
|
||||||
|
// kotlinx-metadata only supports writing Kotlin metadata of version >= 1.4, so we need to
|
||||||
|
// update the metadata version if we encounter older metadata annotations.
|
||||||
|
val metadataVersion =
|
||||||
|
if (header.metadataVersion.let { it.size >= 2 && it[0] >= 1 && it[1] >= 4 }) header.metadataVersion else intArrayOf(1, 4)
|
||||||
val newHeader = when (val metadata = KotlinClassMetadata.read(header)) {
|
val newHeader = when (val metadata = KotlinClassMetadata.read(header)) {
|
||||||
is KotlinClassMetadata.Class -> {
|
is KotlinClassMetadata.Class -> {
|
||||||
val writer = KotlinClassMetadata.Class.Writer()
|
val writer = KotlinClassMetadata.Class.Writer()
|
||||||
metadata.accept(AbiKmClassVisitor(internalName, publicClasses, writer))
|
metadata.accept(AbiKmClassVisitor(internalName, publicClasses, writer))
|
||||||
writer.write(header.metadataVersion, header.extraInt).header
|
writer.write(metadataVersion, header.extraInt).header
|
||||||
}
|
}
|
||||||
is KotlinClassMetadata.FileFacade -> {
|
is KotlinClassMetadata.FileFacade -> {
|
||||||
val writer = KotlinClassMetadata.FileFacade.Writer()
|
val writer = KotlinClassMetadata.FileFacade.Writer()
|
||||||
metadata.accept(AbiKmPackageVisitor(writer))
|
metadata.accept(AbiKmPackageVisitor(writer))
|
||||||
writer.write(header.metadataVersion, header.extraInt).header
|
writer.write(metadataVersion, header.extraInt).header
|
||||||
}
|
}
|
||||||
is KotlinClassMetadata.MultiFileClassPart -> {
|
is KotlinClassMetadata.MultiFileClassPart -> {
|
||||||
val writer = KotlinClassMetadata.MultiFileClassPart.Writer()
|
val writer = KotlinClassMetadata.MultiFileClassPart.Writer()
|
||||||
metadata.accept(AbiKmPackageVisitor(writer))
|
metadata.accept(AbiKmPackageVisitor(writer))
|
||||||
writer.write(metadata.facadeClassName, header.metadataVersion, header.extraInt).header
|
writer.write(metadata.facadeClassName, metadataVersion, header.extraInt).header
|
||||||
}
|
}
|
||||||
else -> header
|
else -> header
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user