From 448c6c2f0dcc6739a6feddd0c0f2fb66d245e27a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 22 Jan 2021 14:08:07 +0100 Subject: [PATCH] kotlinx-metadata-jvm: deprecate KotlinClassHeader.bytecodeVersion #KT-41758 --- libraries/kotlinx-metadata/jvm/ChangeLog.md | 5 ++++ .../kotlinx/metadata/jvm/KotlinClassHeader.kt | 27 ++++++++++++++++++- .../metadata/jvm/KotlinClassMetadata.kt | 20 ++++---------- .../metadata/test/MetadataSmokeTest.kt | 4 +-- .../kotlin/kotlinp/readKotlinClassHeader.kt | 4 +-- 5 files changed, 38 insertions(+), 22 deletions(-) diff --git a/libraries/kotlinx-metadata/jvm/ChangeLog.md b/libraries/kotlinx-metadata/jvm/ChangeLog.md index 1dd23732bf4..990c472a49e 100644 --- a/libraries/kotlinx-metadata/jvm/ChangeLog.md +++ b/libraries/kotlinx-metadata/jvm/ChangeLog.md @@ -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 diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt index a14db2afebf..0050739b3e2 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt @@ -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?, + data2: Array?, + 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() } diff --git a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassMetadata.kt b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassMetadata.kt index 0c270c18690..5ea22aff6f8 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassMetadata.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassMetadata.kt @@ -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) } diff --git a/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt b/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt index ba58029cd31..81b1da18e03 100644 --- a/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt +++ b/libraries/kotlinx-metadata/jvm/test/kotlinx/metadata/test/MetadataSmokeTest.kt @@ -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, diff --git a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/readKotlinClassHeader.kt b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/readKotlinClassHeader.kt index dc92a7f6227..893220be7b5 100644 --- a/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/readKotlinClassHeader.kt +++ b/libraries/tools/kotlinp/src/org/jetbrains/kotlin/kotlinp/readKotlinClassHeader.kt @@ -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? = null var data2: Array? = 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)) } }