Use JvmMetadataVersion/JvmBytecodeBinaryVersion in kotlinx-metadata
#KT-23198
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-2
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user