diff --git a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt index cc2cd3f5f7e..f1ecc3eb9d5 100644 --- a/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt +++ b/build-common/src/org/jetbrains/kotlin/build/JvmBuildMetaInfo.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.build -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion /** diff --git a/build-common/src/org/jetbrains/kotlin/build/JvmBytecodeBinaryVersion.kt b/build-common/src/org/jetbrains/kotlin/build/JvmBytecodeBinaryVersion.kt new file mode 100644 index 00000000000..45f8e71db95 --- /dev/null +++ b/build-common/src/org/jetbrains/kotlin/build/JvmBytecodeBinaryVersion.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.build + +/** + * Bytecode version was in the Kotlin metadata ([Metadata.bytecodeVersion]) since 1.0, but it was never used meaningfully in the compiler, + * outside of one very special case regarding experimental coroutines, which is now obsolete. It is still used in incremental compilation + * caches though. We should probably just pretend that the bytecode version of any Kotlin file from now on is equal to the latest observed + * bytecode version, `1.0.3` (see [INSTANCE]). + */ +class JvmBytecodeBinaryVersion(vararg numbers: Int) { + val major: Int = numbers.getOrNull(0) ?: -1 + val minor: Int = numbers.getOrNull(1) ?: -1 + val patch: Int = numbers.getOrNull(2) ?: -1 + + override fun toString(): String = buildString { + append(major) + if (minor != -1) { + append(".$minor") + if (patch != -1) append(".$patch") + } + } + + companion object { + @JvmField + val INSTANCE = JvmBytecodeBinaryVersion(1, 0, 3) + } +} diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java index 21a70333d44..6ec7c6317ab 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAnnotationNames.java @@ -30,7 +30,6 @@ public final class JvmAnnotationNames { public static final String METADATA_DESC = "L" + JvmClassName.byFqNameWithoutInnerClasses(METADATA_FQ_NAME).getInternalName() + ";"; public static final String METADATA_VERSION_FIELD_NAME = "mv"; - public static final String BYTECODE_VERSION_FIELD_NAME = "bv"; public static final String KIND_FIELD_NAME = "k"; public static final String METADATA_DATA_FIELD_NAME = "d1"; public static final String METADATA_STRINGS_FIELD_NAME = "d2"; diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java index 85cfc82d1d2..0e0c8f1165a 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java @@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.SourceElement; import org.jetbrains.kotlin.load.java.JvmAnnotationNames; -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion; import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; @@ -51,7 +50,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor } private int[] metadataVersionArray = null; - private JvmBytecodeBinaryVersion bytecodeVersion = null; private String extraString = null; private int extraInt = 0; private String packageName = null; @@ -79,17 +77,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor return null; } - return new KotlinClassHeader( - headerKind, - metadataVersion, - bytecodeVersion != null ? bytecodeVersion : JvmBytecodeBinaryVersion.INSTANCE, - data, - incompatibleData, - strings, - extraString, - extraInt, - packageName - ); + return new KotlinClassHeader(headerKind, metadataVersion, data, incompatibleData, strings, extraString, extraInt, packageName); } private boolean shouldHaveData() { @@ -142,11 +130,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor metadataVersionArray = (int[]) value; } } - else if (BYTECODE_VERSION_FIELD_NAME.equals(string)) { - if (value instanceof int[]) { - bytecodeVersion = new JvmBytecodeBinaryVersion((int[]) value); - } - } else if (METADATA_EXTRA_STRING_FIELD_NAME.equals(string)) { if (value instanceof String) { extraString = (String) value; @@ -227,11 +210,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor if ("version".equals(string)) { if (value instanceof int[]) { metadataVersionArray = (int[]) value; - - // If there's no bytecode binary version in the class file, we assume it to be equal to the metadata version - if (bytecodeVersion == null) { - bytecodeVersion = new JvmBytecodeBinaryVersion((int[]) value); - } } } else if ("multifileClassName".equals(string)) { diff --git a/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt b/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt index 6a8bc7a8eaf..9abb0bf0b6c 100644 --- a/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt +++ b/core/deserialization.common.jvm/src/org/jetbrains/kotlin/load/kotlin/header/KotlinClassHeader.kt @@ -8,13 +8,11 @@ package org.jetbrains.kotlin.load.kotlin.header import org.jetbrains.kotlin.load.java.JvmAnnotationNames.* import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.MultifileClassKind.DELEGATING import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.MultifileClassKind.INHERITING -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion class KotlinClassHeader( val kind: Kind, val metadataVersion: JvmMetadataVersion, - val bytecodeVersion: JvmBytecodeBinaryVersion, val data: Array?, val incompatibleData: Array?, val strings: Array?, diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmBytecodeBinaryVersion.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmBytecodeBinaryVersion.kt deleted file mode 100644 index fa972dedd89..00000000000 --- a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmBytecodeBinaryVersion.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.metadata.jvm.deserialization - -import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion - -/** - * The version of conventions used in bytecode of generated .class files, such as default method naming & signatures, - * internal member name mangling specifics, property getter/setter names, etc. - */ -class JvmBytecodeBinaryVersion(vararg numbers: Int) : BinaryVersion(*numbers) { - override fun isCompatible() = this.isCompatibleTo(INSTANCE) - - companion object { - @JvmField - val INSTANCE = JvmBytecodeBinaryVersion(1, 0, 3) - } -} diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/CacheVersionTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/CacheVersionTest.kt index 997617cc0ec..0e309c86f6d 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/CacheVersionTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/CacheVersionTest.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.jps.incremental -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.build.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion import org.junit.Assert.assertEquals import org.junit.Test @@ -54,4 +54,4 @@ class CacheVersionTest { ).toString() ) } -} \ No newline at end of file +} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionManager.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionManager.kt index a36116dbe3e..8318ce3f53d 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionManager.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionManager.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.jps.incremental import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.build.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion import java.io.File import java.io.IOException @@ -79,4 +79,4 @@ data class CacheVersion(val intValue: Int) { ) override fun toString(): String = "CacheVersion(caches: $own, bytecode: $bytecode, metadata: $metadata)" -} \ No newline at end of file +} 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 0050739b3e2..cb48be85dd1 100644 --- a/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt +++ b/libraries/kotlinx-metadata/jvm/src/kotlinx/metadata/jvm/KotlinClassHeader.kt @@ -7,7 +7,6 @@ package kotlinx.metadata.jvm -import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion /** @@ -175,6 +174,6 @@ constructor( level = DeprecationLevel.ERROR ) @JvmField - val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf() + val COMPATIBLE_BYTECODE_VERSION = intArrayOf(1, 0, 3) } }