Remove JvmBytecodeBinaryVersion from the compiler code
Move it to build-common where it's still used in incremental compilation caches, and simplify a bit. In the future, it'll make sense to remove it completely and to avoid writing it to caches. In this commit, I don't do that to prevent the IC cache version to be updated, causing rebuilds for all JPS projects. #KT-41758
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.build
|
package org.jetbrains.kotlin.build
|
||||||
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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_DESC = "L" + JvmClassName.byFqNameWithoutInnerClasses(METADATA_FQ_NAME).getInternalName() + ";";
|
||||||
|
|
||||||
public static final String METADATA_VERSION_FIELD_NAME = "mv";
|
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 KIND_FIELD_NAME = "k";
|
||||||
public static final String METADATA_DATA_FIELD_NAME = "d1";
|
public static final String METADATA_DATA_FIELD_NAME = "d1";
|
||||||
public static final String METADATA_STRINGS_FIELD_NAME = "d2";
|
public static final String METADATA_STRINGS_FIELD_NAME = "d2";
|
||||||
|
|||||||
+1
-23
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
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.metadata.jvm.deserialization.JvmMetadataVersion;
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -51,7 +50,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int[] metadataVersionArray = null;
|
private int[] metadataVersionArray = null;
|
||||||
private JvmBytecodeBinaryVersion bytecodeVersion = null;
|
|
||||||
private String extraString = null;
|
private String extraString = null;
|
||||||
private int extraInt = 0;
|
private int extraInt = 0;
|
||||||
private String packageName = null;
|
private String packageName = null;
|
||||||
@@ -79,17 +77,7 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new KotlinClassHeader(
|
return new KotlinClassHeader(headerKind, metadataVersion, data, incompatibleData, strings, extraString, extraInt, packageName);
|
||||||
headerKind,
|
|
||||||
metadataVersion,
|
|
||||||
bytecodeVersion != null ? bytecodeVersion : JvmBytecodeBinaryVersion.INSTANCE,
|
|
||||||
data,
|
|
||||||
incompatibleData,
|
|
||||||
strings,
|
|
||||||
extraString,
|
|
||||||
extraInt,
|
|
||||||
packageName
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldHaveData() {
|
private boolean shouldHaveData() {
|
||||||
@@ -142,11 +130,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
metadataVersionArray = (int[]) value;
|
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)) {
|
else if (METADATA_EXTRA_STRING_FIELD_NAME.equals(string)) {
|
||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
extraString = (String) value;
|
extraString = (String) value;
|
||||||
@@ -227,11 +210,6 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor
|
|||||||
if ("version".equals(string)) {
|
if ("version".equals(string)) {
|
||||||
if (value instanceof int[]) {
|
if (value instanceof int[]) {
|
||||||
metadataVersionArray = (int[]) value;
|
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)) {
|
else if ("multifileClassName".equals(string)) {
|
||||||
|
|||||||
-2
@@ -8,13 +8,11 @@ package org.jetbrains.kotlin.load.kotlin.header
|
|||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.*
|
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.DELEGATING
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.MultifileClassKind.INHERITING
|
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
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||||
|
|
||||||
class KotlinClassHeader(
|
class KotlinClassHeader(
|
||||||
val kind: Kind,
|
val kind: Kind,
|
||||||
val metadataVersion: JvmMetadataVersion,
|
val metadataVersion: JvmMetadataVersion,
|
||||||
val bytecodeVersion: JvmBytecodeBinaryVersion,
|
|
||||||
val data: Array<String>?,
|
val data: Array<String>?,
|
||||||
val incompatibleData: Array<String>?,
|
val incompatibleData: Array<String>?,
|
||||||
val strings: Array<String>?,
|
val strings: Array<String>?,
|
||||||
|
|||||||
-21
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.incremental
|
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.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -54,4 +54,4 @@ class CacheVersionTest {
|
|||||||
).toString()
|
).toString()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.jps.incremental
|
package org.jetbrains.kotlin.jps.incremental
|
||||||
|
|
||||||
import org.jetbrains.annotations.TestOnly
|
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 org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
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)"
|
override fun toString(): String = "CacheVersion(caches: $own, bytecode: $bytecode, metadata: $metadata)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
package kotlinx.metadata.jvm
|
package kotlinx.metadata.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmBytecodeBinaryVersion
|
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,6 +174,6 @@ constructor(
|
|||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.ERROR
|
||||||
)
|
)
|
||||||
@JvmField
|
@JvmField
|
||||||
val COMPATIBLE_BYTECODE_VERSION = JvmBytecodeBinaryVersion.INSTANCE.toArray().copyOf()
|
val COMPATIBLE_BYTECODE_VERSION = intArrayOf(1, 0, 3)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user