Fix: Use more precise KLIB compatibility check (by metadata version)

Issue #KT-34811
This commit is contained in:
Dmitriy Dolovov
2019-12-12 14:49:38 +03:00
parent 34e1ab4e7a
commit deb4025987
5 changed files with 55 additions and 39 deletions
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.library.KLIB_PROPERTY_METADATA_VERSION
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
class KlibMetadataVersion(major: Int, minor: Int, patch: Int) : BinaryVersion(major, minor, patch) {
class KlibMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
override fun isCompatible(): Boolean = isCompatibleTo(INSTANCE)
@@ -18,19 +18,13 @@ class KlibMetadataVersion(major: Int, minor: Int, patch: Int) : BinaryVersion(ma
val INSTANCE = KlibMetadataVersion(1, 0, 0)
@JvmField
val INVALID_VERSION = KlibMetadataVersion(-1, -1, -1)
val INVALID_VERSION = KlibMetadataVersion()
}
}
fun KlibMetadataVersion(vararg values: Int): KlibMetadataVersion {
if (values.size != 3) error("Metadata version should be in major.minor.patch format: $values")
return KlibMetadataVersion(values[0], values[1], values[2])
}
val KotlinLibrary.metadataVersion: KlibMetadataVersion
val KotlinLibrary.metadataVersion: KlibMetadataVersion?
get() {
val versionString = manifestProperties.getProperty(KLIB_PROPERTY_METADATA_VERSION)
val versionIntArray = BinaryVersion.parseVersionArray(versionString)
?: error("Could not parse metadata version: $versionString")
val versionString = manifestProperties.getProperty(KLIB_PROPERTY_METADATA_VERSION) ?: return null
val versionIntArray = BinaryVersion.parseVersionArray(versionString) ?: return null
return KlibMetadataVersion(*versionIntArray)
}
}