kotlinx-metadata-jvm: deprecate KotlinClassHeader.bytecodeVersion
#KT-41758
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
# kotlinx-metadata-jvm
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- Deprecate `KotlinClassHeader.bytecodeVersion` and `KotlinClassHeader`'s constructor that takes a bytecode version array.
|
||||
Related to ['KT-41758`](https://youtrack.jetbrains.com/issue/KT-41758).
|
||||
|
||||
## 0.2.0
|
||||
|
||||
- ['KT-41011`](https://youtrack.jetbrains.com/issue/KT-41011) Using KotlinClassMetadata.Class.Writer with metadata version < 1.4 will write incorrect version requirement table
|
||||
|
||||
@@ -23,7 +23,13 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
* @param packageName see [packageName]
|
||||
* @param extraInt see [extraInt]
|
||||
*/
|
||||
class KotlinClassHeader(
|
||||
class KotlinClassHeader
|
||||
@Deprecated(
|
||||
"Use another constructor, which doesn't take bytecodeVersion as a parameter.",
|
||||
ReplaceWith("KotlinClassHeader(kind, metadataVersion, data1, data2, extraString, packageName, extraInt)"),
|
||||
DeprecationLevel.ERROR
|
||||
)
|
||||
constructor(
|
||||
kind: Int?,
|
||||
metadataVersion: IntArray?,
|
||||
bytecodeVersion: IntArray?,
|
||||
@@ -33,6 +39,17 @@ class KotlinClassHeader(
|
||||
packageName: String?,
|
||||
extraInt: Int?
|
||||
) {
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
constructor(
|
||||
kind: Int?,
|
||||
metadataVersion: IntArray?,
|
||||
data1: Array<String>?,
|
||||
data2: Array<String>?,
|
||||
extraString: String?,
|
||||
packageName: String?,
|
||||
extraInt: Int?
|
||||
) : this(kind, metadataVersion, null, data1, data2, extraString, packageName, extraInt)
|
||||
|
||||
/**
|
||||
* A kind of the metadata this header encodes.
|
||||
*
|
||||
@@ -59,6 +76,10 @@ class KotlinClassHeader(
|
||||
* @see Metadata.bytecodeVersion
|
||||
* @see COMPATIBLE_BYTECODE_VERSION
|
||||
*/
|
||||
@Deprecated(
|
||||
"Bytecode version had no significant use in Kotlin metadata and it will be removed in a future version.",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
val bytecodeVersion: IntArray = bytecodeVersion ?: intArrayOf()
|
||||
|
||||
/**
|
||||
@@ -149,6 +170,10 @@ class KotlinClassHeader(
|
||||
*
|
||||
* @see bytecodeVersion
|
||||
*/
|
||||
@Deprecated(
|
||||
"Bytecode version had no significant use in Kotlin metadata and it will be removed in a future version.",
|
||||
level = DeprecationLevel.ERROR
|
||||
)
|
||||
@JvmField
|
||||
val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf()
|
||||
}
|
||||
|
||||
@@ -68,10 +68,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
): Class {
|
||||
checkMetadataVersion(metadataVersion)
|
||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||
val metadata = KotlinClassHeader(
|
||||
KotlinClassHeader.CLASS_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
||||
d1, d2, null, null, extraInt
|
||||
)
|
||||
val metadata = KotlinClassHeader(KotlinClassHeader.CLASS_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||
return Class(metadata)
|
||||
}
|
||||
}
|
||||
@@ -122,10 +119,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
): FileFacade {
|
||||
checkMetadataVersion(metadataVersion)
|
||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||
val metadata = KotlinClassHeader(
|
||||
KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
||||
d1, d2, null, null, extraInt
|
||||
)
|
||||
val metadata = KotlinClassHeader(KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||
return FileFacade(metadata)
|
||||
}
|
||||
}
|
||||
@@ -197,10 +191,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
val (d1, d2) =
|
||||
if (proto != null) writeProtoBufData(proto, c)
|
||||
else Pair(emptyArray(), emptyArray())
|
||||
val metadata = KotlinClassHeader(
|
||||
KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
||||
d1, d2, null, null, extraInt
|
||||
)
|
||||
val metadata = KotlinClassHeader(KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||
return SyntheticClass(metadata)
|
||||
}
|
||||
}
|
||||
@@ -238,7 +229,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
): MultiFileClassFacade {
|
||||
checkMetadataVersion(metadataVersion)
|
||||
val metadata = KotlinClassHeader(
|
||||
KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
||||
KotlinClassHeader.MULTI_FILE_CLASS_FACADE_KIND, metadataVersion,
|
||||
partClassNames.toTypedArray(), null, null, null, extraInt
|
||||
)
|
||||
return MultiFileClassFacade(metadata)
|
||||
@@ -303,8 +294,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
||||
checkMetadataVersion(metadataVersion)
|
||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||
val metadata = KotlinClassHeader(
|
||||
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
||||
d1, d2, facadeClassName, null, extraInt
|
||||
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, d1, d2, facadeClassName, null, extraInt
|
||||
)
|
||||
return MultiFileClassPart(metadata)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import kotlin.test.assertFailsWith
|
||||
class MetadataSmokeTest {
|
||||
private fun Class<*>.readMetadata(): KotlinClassHeader {
|
||||
return getAnnotation(Metadata::class.java).run {
|
||||
KotlinClassHeader(kind, metadataVersion, bytecodeVersion, data1, data2, extraString, packageName, extraInt)
|
||||
KotlinClassHeader(kind, metadataVersion, data1, data2, extraString, packageName, extraInt)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,6 @@ class MetadataSmokeTest {
|
||||
// Use the created KotlinMetadata instance to write @kotlin.Metadata annotation on the class file
|
||||
visitAnnotation("Lkotlin/Metadata;", true).run {
|
||||
visit("mv", header.metadataVersion)
|
||||
visit("bv", header.bytecodeVersion)
|
||||
visit("k", header.kind)
|
||||
visitArray("d1").run {
|
||||
header.data1.forEach { visit(null, it) }
|
||||
@@ -160,7 +159,6 @@ class MetadataSmokeTest {
|
||||
KotlinClassHeader(
|
||||
kind = annotation.kind,
|
||||
metadataVersion = annotation.metadataVersion,
|
||||
bytecodeVersion = annotation.bytecodeVersion,
|
||||
data1 = annotation.data1,
|
||||
data2 = annotation.data2,
|
||||
extraInt = annotation.extraInt,
|
||||
|
||||
@@ -31,7 +31,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
||||
object : AnnotationVisitor(Opcodes.API_VERSION) {
|
||||
var kind: Int? = null
|
||||
var metadataVersion: IntArray? = null
|
||||
var bytecodeVersion: IntArray? = null
|
||||
var data1: Array<String>? = null
|
||||
var data2: Array<String>? = null
|
||||
var extraString: String? = null
|
||||
@@ -42,7 +41,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
||||
when (name) {
|
||||
"k" -> kind = value as? Int
|
||||
"mv" -> metadataVersion = value as? IntArray
|
||||
"bv" -> bytecodeVersion = value as? IntArray
|
||||
"xs" -> extraString = value as? String
|
||||
"xi" -> extraInt = value as? Int
|
||||
"pn" -> packageName = value as? String
|
||||
@@ -71,6 +69,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
||||
}
|
||||
|
||||
override fun visitEnd() {
|
||||
output(KotlinClassHeader(kind, metadataVersion, bytecodeVersion, data1, data2, extraString, packageName, extraInt))
|
||||
output(KotlinClassHeader(kind, metadataVersion, data1, data2, extraString, packageName, extraInt))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user