BinaryVersion: introduce isCompatibleWithCurrentCompilerVersion
This commit is contained in:
+1
-1
@@ -53,7 +53,7 @@ class BuiltInDefinitionFile(
|
||||
val stream = ByteArrayInputStream(contents)
|
||||
|
||||
val version = BuiltInsBinaryVersion.readFrom(stream)
|
||||
if (!version.isCompatible()) {
|
||||
if (!version.isCompatibleWithCurrentCompilerVersion()) {
|
||||
return Incompatible(version)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@ private data class BinaryVersionAndPackageFragment(
|
||||
fun createFromStream(stream: InputStream): BinaryVersionAndPackageFragment {
|
||||
val version = BuiltInsBinaryVersion.readFrom(stream)
|
||||
|
||||
if (!version.isCompatible()) {
|
||||
if (!version.isCompatibleWithCurrentCompilerVersion()) {
|
||||
// TODO: report a proper diagnostic
|
||||
throw UnsupportedOperationException(
|
||||
"Kotlin built-in definition format version is not supported: " +
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||
|
||||
class KlibIrVersion(major: Int, minor: Int, patch: Int) : BinaryVersion(major, minor, patch) {
|
||||
|
||||
override fun isCompatible(): Boolean = isCompatibleTo(INSTANCE)
|
||||
override fun isCompatibleWithCurrentCompilerVersion(): Boolean = isCompatibleTo(INSTANCE)
|
||||
|
||||
|
||||
companion object {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||
|
||||
class KlibMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
|
||||
|
||||
override fun isCompatible(): Boolean = isCompatibleTo(INSTANCE)
|
||||
override fun isCompatibleWithCurrentCompilerVersion(): Boolean = isCompatibleTo(INSTANCE)
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ class MetadataPackageFragment(
|
||||
private fun readProto(stream: InputStream): Triple<ProtoBuf.PackageFragment, NameResolverImpl, BuiltInsBinaryVersion> {
|
||||
val version = BuiltInsBinaryVersion.readFrom(stream)
|
||||
|
||||
if (!version.isCompatible()) {
|
||||
if (!version.isCompatibleWithCurrentCompilerVersion()) {
|
||||
// TODO: report a proper diagnostic
|
||||
throw UnsupportedOperationException(
|
||||
"Kotlin metadata definition format version is not supported: " +
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||
class JvmMetadataVersion(versionArray: IntArray, val isStrictSemantics: Boolean) : BinaryVersion(*versionArray) {
|
||||
constructor(vararg numbers: Int) : this(numbers, isStrictSemantics = false)
|
||||
|
||||
override fun isCompatible(): Boolean =
|
||||
override fun isCompatibleWithCurrentCompilerVersion(): Boolean =
|
||||
// NOTE: 1.0 is a pre-Kotlin-1.0 metadata version, with which the current compiler is incompatible
|
||||
(major != 1 || minor != 0) &&
|
||||
if (isStrictSemantics) {
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.io.InputStream
|
||||
* of the core protobuf messages (metadata.proto).
|
||||
*/
|
||||
class BuiltInsBinaryVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
|
||||
override fun isCompatible(): Boolean =
|
||||
override fun isCompatibleWithCurrentCompilerVersion(): Boolean =
|
||||
this.isCompatibleTo(INSTANCE)
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -13,7 +13,7 @@ fun InputStream.readBuiltinsPackageFragment(): Pair<ProtoBuf.PackageFragment?, B
|
||||
use { stream ->
|
||||
val version = BuiltInsBinaryVersion.readFrom(stream)
|
||||
val proto =
|
||||
if (version.isCompatible()) ProtoBuf.PackageFragment.parseFrom(
|
||||
if (version.isCompatibleWithCurrentCompilerVersion()) ProtoBuf.PackageFragment.parseFrom(
|
||||
stream,
|
||||
ExtensionRegistryLite.newInstance().apply(BuiltInsProtoBuf::registerAllExtensions)
|
||||
)
|
||||
|
||||
@@ -25,7 +25,10 @@ abstract class BinaryVersion(private vararg val numbers: Int) {
|
||||
numbers.asList().subList(3, numbers.size).toList()
|
||||
} else emptyList()
|
||||
|
||||
abstract fun isCompatible(): Boolean
|
||||
@Deprecated("Please use isCompatibleWithCurrentCompilerVersion()", ReplaceWith("isCompatibleWithCurrentCompilerVersion()"))
|
||||
fun isCompatible(): Boolean = isCompatibleWithCurrentCompilerVersion()
|
||||
|
||||
abstract fun isCompatibleWithCurrentCompilerVersion(): Boolean
|
||||
|
||||
fun toArray(): IntArray = numbers
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.util.*
|
||||
class KotlinJavascriptMetadata(val version: JsMetadataVersion, val moduleName: String, val body: ByteArray)
|
||||
|
||||
class JsMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
|
||||
override fun isCompatible(): Boolean =
|
||||
override fun isCompatibleWithCurrentCompilerVersion(): Boolean =
|
||||
this.isCompatibleTo(INSTANCE)
|
||||
|
||||
fun toInteger() = (patch shl 16) + (minOf(minor, 255) shl 8) + minOf(major, 255)
|
||||
|
||||
@@ -194,7 +194,7 @@ public class JsConfig {
|
||||
Set<String> moduleNames = new LinkedHashSet<>();
|
||||
|
||||
for (KotlinJavascriptMetadata metadata : metadataList) {
|
||||
if (!metadata.getVersion().isCompatible() && !skipMetadataVersionCheck) {
|
||||
if (!metadata.getVersion().isCompatibleWithCurrentCompilerVersion() && !skipMetadataVersionCheck) {
|
||||
report.error("File '" + path + "' was compiled with an incompatible version of Kotlin. " +
|
||||
"The binary version of its metadata is " + metadata.getVersion() +
|
||||
", expected version is " + JsMetadataVersion.INSTANCE);
|
||||
@@ -296,7 +296,7 @@ public class JsConfig {
|
||||
private ModuleDescriptorImpl createModuleDescriptor(KotlinJavascriptMetadata metadata) {
|
||||
return factoryMap.computeIfAbsent(metadata, m -> {
|
||||
LanguageVersionSettings languageVersionSettings = CommonConfigurationKeysKt.getLanguageVersionSettings(configuration);
|
||||
assert m.getVersion().isCompatible() ||
|
||||
assert m.getVersion().isCompatibleWithCurrentCompilerVersion() ||
|
||||
languageVersionSettings.getFlag(AnalysisFlags.getSkipMetadataVersionCheck()) :
|
||||
"Expected JS metadata version " + JsMetadataVersion.INSTANCE + ", but actual metadata version is " + m.getVersion();
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ internal class DefaultNativeLibraryLoader(
|
||||
logger.fatal("Library does not have metadata version specified in manifest: $file")
|
||||
|
||||
val metadataVersion = library.metadataVersion
|
||||
if (metadataVersion?.isCompatible() != true)
|
||||
if (metadataVersion?.isCompatibleWithCurrentCompilerVersion() != true)
|
||||
logger.fatal(
|
||||
"""
|
||||
Library has incompatible metadata version ${metadataVersion ?: "\"unknown\""}: $file
|
||||
|
||||
Reference in New Issue
Block a user