kotlinx-metadata-jvm: deprecate KotlinClassHeader.bytecodeVersion
#KT-41758
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
# kotlinx-metadata-jvm
|
# 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
|
## 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
|
- ['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 packageName see [packageName]
|
||||||
* @param extraInt see [extraInt]
|
* @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?,
|
kind: Int?,
|
||||||
metadataVersion: IntArray?,
|
metadataVersion: IntArray?,
|
||||||
bytecodeVersion: IntArray?,
|
bytecodeVersion: IntArray?,
|
||||||
@@ -33,6 +39,17 @@ class KotlinClassHeader(
|
|||||||
packageName: String?,
|
packageName: String?,
|
||||||
extraInt: Int?
|
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.
|
* A kind of the metadata this header encodes.
|
||||||
*
|
*
|
||||||
@@ -59,6 +76,10 @@ class KotlinClassHeader(
|
|||||||
* @see Metadata.bytecodeVersion
|
* @see Metadata.bytecodeVersion
|
||||||
* @see COMPATIBLE_BYTECODE_VERSION
|
* @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()
|
val bytecodeVersion: IntArray = bytecodeVersion ?: intArrayOf()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -149,6 +170,10 @@ class KotlinClassHeader(
|
|||||||
*
|
*
|
||||||
* @see bytecodeVersion
|
* @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
|
@JvmField
|
||||||
val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf()
|
val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,10 +68,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
|||||||
): Class {
|
): Class {
|
||||||
checkMetadataVersion(metadataVersion)
|
checkMetadataVersion(metadataVersion)
|
||||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||||
val metadata = KotlinClassHeader(
|
val metadata = KotlinClassHeader(KotlinClassHeader.CLASS_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||||
KotlinClassHeader.CLASS_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
|
||||||
d1, d2, null, null, extraInt
|
|
||||||
)
|
|
||||||
return Class(metadata)
|
return Class(metadata)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,10 +119,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
|||||||
): FileFacade {
|
): FileFacade {
|
||||||
checkMetadataVersion(metadataVersion)
|
checkMetadataVersion(metadataVersion)
|
||||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||||
val metadata = KotlinClassHeader(
|
val metadata = KotlinClassHeader(KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||||
KotlinClassHeader.FILE_FACADE_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
|
||||||
d1, d2, null, null, extraInt
|
|
||||||
)
|
|
||||||
return FileFacade(metadata)
|
return FileFacade(metadata)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,10 +191,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
|||||||
val (d1, d2) =
|
val (d1, d2) =
|
||||||
if (proto != null) writeProtoBufData(proto, c)
|
if (proto != null) writeProtoBufData(proto, c)
|
||||||
else Pair(emptyArray(), emptyArray())
|
else Pair(emptyArray(), emptyArray())
|
||||||
val metadata = KotlinClassHeader(
|
val metadata = KotlinClassHeader(KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, d1, d2, null, null, extraInt)
|
||||||
KotlinClassHeader.SYNTHETIC_CLASS_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
|
||||||
d1, d2, null, null, extraInt
|
|
||||||
)
|
|
||||||
return SyntheticClass(metadata)
|
return SyntheticClass(metadata)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,7 +229,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
|||||||
): MultiFileClassFacade {
|
): MultiFileClassFacade {
|
||||||
checkMetadataVersion(metadataVersion)
|
checkMetadataVersion(metadataVersion)
|
||||||
val metadata = KotlinClassHeader(
|
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
|
partClassNames.toTypedArray(), null, null, null, extraInt
|
||||||
)
|
)
|
||||||
return MultiFileClassFacade(metadata)
|
return MultiFileClassFacade(metadata)
|
||||||
@@ -303,8 +294,7 @@ sealed class KotlinClassMetadata(val header: KotlinClassHeader) {
|
|||||||
checkMetadataVersion(metadataVersion)
|
checkMetadataVersion(metadataVersion)
|
||||||
val (d1, d2) = writeProtoBufData(t.build(), c)
|
val (d1, d2) = writeProtoBufData(t.build(), c)
|
||||||
val metadata = KotlinClassHeader(
|
val metadata = KotlinClassHeader(
|
||||||
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, KotlinClassHeader.COMPATIBLE_BYTECODE_VERSION,
|
KotlinClassHeader.MULTI_FILE_CLASS_PART_KIND, metadataVersion, d1, d2, facadeClassName, null, extraInt
|
||||||
d1, d2, facadeClassName, null, extraInt
|
|
||||||
)
|
)
|
||||||
return MultiFileClassPart(metadata)
|
return MultiFileClassPart(metadata)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import kotlin.test.assertFailsWith
|
|||||||
class MetadataSmokeTest {
|
class MetadataSmokeTest {
|
||||||
private fun Class<*>.readMetadata(): KotlinClassHeader {
|
private fun Class<*>.readMetadata(): KotlinClassHeader {
|
||||||
return getAnnotation(Metadata::class.java).run {
|
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
|
// Use the created KotlinMetadata instance to write @kotlin.Metadata annotation on the class file
|
||||||
visitAnnotation("Lkotlin/Metadata;", true).run {
|
visitAnnotation("Lkotlin/Metadata;", true).run {
|
||||||
visit("mv", header.metadataVersion)
|
visit("mv", header.metadataVersion)
|
||||||
visit("bv", header.bytecodeVersion)
|
|
||||||
visit("k", header.kind)
|
visit("k", header.kind)
|
||||||
visitArray("d1").run {
|
visitArray("d1").run {
|
||||||
header.data1.forEach { visit(null, it) }
|
header.data1.forEach { visit(null, it) }
|
||||||
@@ -160,7 +159,6 @@ class MetadataSmokeTest {
|
|||||||
KotlinClassHeader(
|
KotlinClassHeader(
|
||||||
kind = annotation.kind,
|
kind = annotation.kind,
|
||||||
metadataVersion = annotation.metadataVersion,
|
metadataVersion = annotation.metadataVersion,
|
||||||
bytecodeVersion = annotation.bytecodeVersion,
|
|
||||||
data1 = annotation.data1,
|
data1 = annotation.data1,
|
||||||
data2 = annotation.data2,
|
data2 = annotation.data2,
|
||||||
extraInt = annotation.extraInt,
|
extraInt = annotation.extraInt,
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
|||||||
object : AnnotationVisitor(Opcodes.API_VERSION) {
|
object : AnnotationVisitor(Opcodes.API_VERSION) {
|
||||||
var kind: Int? = null
|
var kind: Int? = null
|
||||||
var metadataVersion: IntArray? = null
|
var metadataVersion: IntArray? = null
|
||||||
var bytecodeVersion: IntArray? = null
|
|
||||||
var data1: Array<String>? = null
|
var data1: Array<String>? = null
|
||||||
var data2: Array<String>? = null
|
var data2: Array<String>? = null
|
||||||
var extraString: String? = null
|
var extraString: String? = null
|
||||||
@@ -42,7 +41,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
|||||||
when (name) {
|
when (name) {
|
||||||
"k" -> kind = value as? Int
|
"k" -> kind = value as? Int
|
||||||
"mv" -> metadataVersion = value as? IntArray
|
"mv" -> metadataVersion = value as? IntArray
|
||||||
"bv" -> bytecodeVersion = value as? IntArray
|
|
||||||
"xs" -> extraString = value as? String
|
"xs" -> extraString = value as? String
|
||||||
"xi" -> extraInt = value as? Int
|
"xi" -> extraInt = value as? Int
|
||||||
"pn" -> packageName = value as? String
|
"pn" -> packageName = value as? String
|
||||||
@@ -71,6 +69,6 @@ private fun readMetadataVisitor(output: (KotlinClassHeader) -> Unit): Annotation
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnd() {
|
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