Deserialization/class reading: pass chosen JvmMetadataVersion whenever possible

This commit is contained in:
Mikhail Glukhikh
2022-12-02 16:38:59 +01:00
parent 52ab565cc6
commit 0c4a0360ac
67 changed files with 399 additions and 163 deletions
@@ -1366,7 +1366,7 @@ public final class kotlinx/metadata/jvm/KotlinClassMetadata$Unknown : kotlinx/me
public final class kotlinx/metadata/jvm/KotlinModuleMetadata {
public static final field Companion Lkotlinx/metadata/jvm/KotlinModuleMetadata$Companion;
public fun <init> ([B)V
public fun <init> ([BLkotlinx/metadata/internal/metadata/jvm/deserialization/JvmMetadataVersion;)V
public final fun accept (Lkotlinx/metadata/jvm/KmModuleVisitor;)V
public final fun getBytes ()[B
public static final fun read ([B)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
@@ -445,7 +445,7 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
if (!JvmMetadataVersion(
annotationData.metadataVersion,
(annotationData.extraInt and (1 shl 3)/* see JvmAnnotationNames.METADATA_STRICT_VERSION_SEMANTICS_FLAG */) != 0
).isCompatible()
).isCompatibleWithCurrentCompilerVersion()
) return null
return try {
@@ -25,9 +25,13 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.serializeToByteArray
*
* @property bytes the byte array representing the contents of a `.kotlin_module` file
*/
class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePrivate") val bytes: ByteArray) {
@get:IgnoreInApiDump internal val data: ModuleMapping = ModuleMapping.loadModuleMapping(
bytes, javaClass.name, skipMetadataVersionCheck = false, isJvmPackageNameSupported = true
class KotlinModuleMetadata(@Suppress("MemberVisibilityCanBePrivate") val bytes: ByteArray, jvmMetadataVersion: JvmMetadataVersion) {
@get:IgnoreInApiDump
internal val data: ModuleMapping = ModuleMapping.loadModuleMapping(
bytes, javaClass.name,
skipMetadataVersionCheck = false,
isJvmPackageNameSupported = true,
metadataVersionFromLanguageVersion = jvmMetadataVersion
) {
// TODO: report incorrect versions of modules
}
@@ -86,7 +90,7 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
*/
@Deprecated("Writer API is deprecated as excessive and cumbersome. Please use KotlinModuleMetadata.write(kmModule, metadataVersion)")
fun write(metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): KotlinModuleMetadata =
KotlinModuleMetadata(b.build().serializeToByteArray(JvmMetadataVersion(*metadataVersion), 0))
KotlinModuleMetadata(b.build().serializeToByteArray(JvmMetadataVersion(*metadataVersion), 0), jvmMetadataVersion)
}
/**
@@ -125,7 +129,7 @@ class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePri
@JvmStatic
fun read(bytes: ByteArray): KotlinModuleMetadata? {
try {
val result = KotlinModuleMetadata(bytes)
val result = KotlinModuleMetadata(bytes, JvmMetadataVersion.INSTANCE)
if (result.data == ModuleMapping.EMPTY) return null
if (result.data == ModuleMapping.CORRUPTED) {