Use JvmMetadataVersion/JvmBytecodeBinaryVersion in kotlinx-metadata

#KT-23198
This commit is contained in:
Alexander Udalov
2018-05-16 12:21:14 +02:00
parent ffa6b6233b
commit c87218ac6c
5 changed files with 12 additions and 14 deletions
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.load.kotlin package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
@@ -17,7 +16,6 @@ fun ModuleMapping.Companion.loadModuleMapping(
loadModuleMapping( loadModuleMapping(
bytes, bytes,
debugName, debugName,
{ version -> JvmMetadataVersion(*version).isCompatible() },
configuration.skipMetadataVersionCheck, configuration.skipMetadataVersionCheck,
configuration.isJvmPackageNameSupported configuration.isJvmPackageNameSupported
) )
@@ -33,7 +33,6 @@ class ModuleMapping private constructor(
fun loadModuleMapping( fun loadModuleMapping(
bytes: ByteArray?, bytes: ByteArray?,
debugName: String, debugName: String,
isVersionCompatible: (IntArray) -> Boolean,
skipMetadataVersionCheck: Boolean, skipMetadataVersionCheck: Boolean,
isJvmPackageNameSupported: Boolean isJvmPackageNameSupported: Boolean
): ModuleMapping { ): ModuleMapping {
@@ -50,7 +49,7 @@ class ModuleMapping private constructor(
return CORRUPTED return CORRUPTED
} }
if (skipMetadataVersionCheck || isVersionCompatible(versionNumber)) { if (skipMetadataVersionCheck || JvmMetadataVersion(*versionNumber).isCompatible()) {
val moduleProto = JvmModuleProtoBuf.Module.parseFrom(stream) ?: return EMPTY val moduleProto = JvmModuleProtoBuf.Module.parseFrom(stream) ?: return EMPTY
val result = linkedMapOf<String, PackageParts>() val result = linkedMapOf<String, PackageParts>()
@@ -5,6 +5,9 @@
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
/** /**
* A mirror to the [Metadata] annotation on a JVM class file, containing the metadata of Kotlin declarations declared in the class file. * A mirror to the [Metadata] annotation on a JVM class file, containing the metadata of Kotlin declarations declared in the class file.
* Properties of this class correspond to the properties of [Metadata], but the names are not shortened because there's no restriction * Properties of this class correspond to the properties of [Metadata], but the names are not shortened because there's no restriction
@@ -142,7 +145,7 @@ class KotlinClassHeader(
* @see metadataVersion * @see metadataVersion
*/ */
@JvmField @JvmField
val COMPATIBLE_METADATA_VERSION = intArrayOf(1, 1, 10) val COMPATIBLE_METADATA_VERSION = JvmMetadataVersion.INSTANCE.toArray().copyOf()
/** /**
* The latest bytecode version supported by this version of the library. * The latest bytecode version supported by this version of the library.
@@ -150,6 +153,6 @@ class KotlinClassHeader(
* @see bytecodeVersion * @see bytecodeVersion
*/ */
@JvmField @JvmField
val COMPATIBLE_BYTECODE_VERSION = intArrayOf(1, 0, 2) val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf()
} }
} }
@@ -14,6 +14,7 @@ import kotlinx.metadata.impl.LambdaWriter
import kotlinx.metadata.impl.PackageWriter import kotlinx.metadata.impl.PackageWriter
import kotlinx.metadata.impl.accept import kotlinx.metadata.impl.accept
import kotlinx.metadata.jvm.impl.writeProtoBufData import kotlinx.metadata.jvm.impl.writeProtoBufData
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable
import kotlin.LazyThreadSafetyMode.PUBLICATION import kotlin.LazyThreadSafetyMode.PUBLICATION
@@ -312,8 +313,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
@JvmStatic @JvmStatic
fun read(header: KotlinClassHeader): KotlinClassMetadata? { fun read(header: KotlinClassHeader): KotlinClassMetadata? {
// We only support metadata of version 1.1.* (this is Kotlin from 1.0 until today) // We only support metadata of version 1.1.* (this is Kotlin from 1.0 until today)
val version = header.metadataVersion if (!JvmMetadataVersion(*header.metadataVersion).isCompatible()) return null
if (version.getOrNull(0) != 1 || version.getOrNull(1) != 1) return null
return try { return try {
when (header.kind) { when (header.kind) {
@@ -5,9 +5,8 @@
package kotlinx.metadata.jvm package kotlinx.metadata.jvm
import kotlinx.metadata.KmAnnotation
import kotlinx.metadata.ClassName
import kotlinx.metadata.InconsistentKotlinMetadataException import kotlinx.metadata.InconsistentKotlinMetadataException
import kotlinx.metadata.KmAnnotation
import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts
@@ -22,10 +21,9 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.serializeToByteArray
* @property bytes the byte array representing the contents of a `.kotlin_module` file * @property bytes the byte array representing the contents of a `.kotlin_module` file
*/ */
class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePrivate") val bytes: ByteArray) { class KotlinModuleMetadata(@Suppress("CanBeParameter", "MemberVisibilityCanBePrivate") val bytes: ByteArray) {
internal val data: ModuleMapping = ModuleMapping.loadModuleMapping(bytes, javaClass.name, isVersionCompatible = { version -> internal val data: ModuleMapping = ModuleMapping.loadModuleMapping(
// We only support metadata of version 1.1.* (this is Kotlin from 1.0 until today) bytes, javaClass.name, skipMetadataVersionCheck = false, isJvmPackageNameSupported = true
version.getOrNull(0) == 1 && version.getOrNull(1) == 1 )
}, skipMetadataVersionCheck = false, isJvmPackageNameSupported = true)
/** /**
* A [KmModuleVisitor] that generates the metadata of a Kotlin JVM module file. * A [KmModuleVisitor] that generates the metadata of a Kotlin JVM module file.