diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index 69335cbc7c3..fe37bafb3e7 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -326,7 +326,10 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration fun testRequireKotlinInNestedClassesAgainst14Js() { val library = compileJsLibrary("library", additionalOptions = listOf("-Xmetadata-version=1.4.0")) - compileKotlin("source.kt", File(tmpdir, "usage.js"), listOf(library), K2JSCompiler()) + compileKotlin( + "source.kt", File(tmpdir, "usage.js"), listOf(library), K2JSCompiler(), + additionalOptions = listOf("-Xskip-metadata-version-check") + ) } /*test source mapping generation when source info is absent*/ diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt index bf3f14073b1..4bf35a160c9 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt @@ -27,7 +27,7 @@ class KotlinJavascriptMetadata(val version: JsMetadataVersion, val moduleName: S // TODO: move to JS modules class JsMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) { override fun isCompatible(): Boolean = - isMetadataVersionCompatible() + this.isCompatibleTo(INSTANCE) fun toInteger() = (patch shl 16) + (minOf(minor, 255) shl 8) + minOf(major, 255) diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmMetadataVersion.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmMetadataVersion.kt index 6c8df190766..5ed58e5d6b3 100644 --- a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmMetadataVersion.kt +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/JvmMetadataVersion.kt @@ -12,9 +12,11 @@ import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion * This version includes the version of the core protobuf messages (metadata.proto) as well as JVM extensions (jvm_metadata.proto). */ class JvmMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) { - // NOTE: 1.1 is incompatible with 1.0 + // In Kotlin 1.4, JVM metadata version is going to be advanced to 1.4.0. + // Kotlin 1.3 is able to read metadata of versions up to Kotlin 1.4. + // NOTE: 1.0 is a pre-Kotlin-1.0 metadata version, with which the current compiler is incompatible override fun isCompatible() = - isMetadataVersionCompatible() && minor != 0 + major == 1 && minor in 1..4 companion object { @JvmField diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/builtins/BuiltInsBinaryVersion.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/builtins/BuiltInsBinaryVersion.kt index d59e193637f..09f99f43e6d 100644 --- a/core/metadata/src/org/jetbrains/kotlin/metadata/builtins/BuiltInsBinaryVersion.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/builtins/BuiltInsBinaryVersion.kt @@ -14,8 +14,8 @@ import java.io.InputStream * of the core protobuf messages (metadata.proto). */ class BuiltInsBinaryVersion(vararg numbers: Int) : BinaryVersion(*numbers) { - override fun isCompatible() = - isMetadataVersionCompatible() + override fun isCompatible(): Boolean = + this.isCompatibleTo(INSTANCE) companion object { @JvmField diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/BinaryVersion.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/BinaryVersion.kt index 541c9b314c6..d6ab3041893 100644 --- a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/BinaryVersion.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/BinaryVersion.kt @@ -35,12 +35,6 @@ abstract class BinaryVersion(private vararg val numbers: Int) { else major == ourVersion.major && minor <= ourVersion.minor } - // In Kotlin 1.4, all metadata versions (JVM, JS, built-ins/metadata) are going to be advanced to 1.4.0. - // Kotlin 1.3 is able to read metadata of versions up to Kotlin 1.4 - protected fun isMetadataVersionCompatible(): Boolean { - return major == 1 && minor <= 4 - } - fun isAtLeast(major: Int, minor: Int, patch: Int): Boolean { if (this.major > major) return true if (this.major < major) return false