Added KotlinVersion.kt
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package kotlin
|
||||
|
||||
/**
|
||||
* Represents a version of the Kotlin standard library.
|
||||
*
|
||||
* [major], [minor] and [patch] are integer components of a version,
|
||||
* they must be non-negative and not greater than 255 ([MAX_COMPONENT_VALUE]).
|
||||
*
|
||||
* @constructor Creates a version from all three components.
|
||||
*/
|
||||
public class KotlinVersion(val major: Int, val minor: Int, val patch: Int) : Comparable<KotlinVersion> {
|
||||
/**
|
||||
* Creates a version from [major] and [minor] components, leaving [patch] component zero.
|
||||
*/
|
||||
public constructor(major: Int, minor: Int) : this(major, minor, 0)
|
||||
|
||||
private val version = versionOf(major, minor, patch)
|
||||
|
||||
private fun versionOf(major: Int, minor: Int, patch: Int): Int {
|
||||
require(major in 0..MAX_COMPONENT_VALUE && minor in 0..MAX_COMPONENT_VALUE && patch in 0..MAX_COMPONENT_VALUE) {
|
||||
"Version components are out of range: $major.$minor.$patch"
|
||||
}
|
||||
return major shl 16 + minor shl 8 + patch
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the string representation of this version
|
||||
*/
|
||||
override fun toString(): String = "$major.$minor.$patch"
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
val otherVersion = (other as? KotlinVersion) ?: return false
|
||||
return this.version == otherVersion.version
|
||||
}
|
||||
|
||||
override fun hashCode(): Int = version
|
||||
|
||||
override fun compareTo(other: KotlinVersion): Int = version - other.version
|
||||
|
||||
/**
|
||||
* Returns `true` if this version is not less than the version specified
|
||||
* with the provided [major] and [minor] components.
|
||||
*/
|
||||
public fun isAtLeast(major: Int, minor: Int): Boolean =
|
||||
// or this.version >= versionOf(major, minor, 0)
|
||||
this.major > major || (this.major == major &&
|
||||
this.minor >= minor)
|
||||
|
||||
/**
|
||||
* Returns `true` if this version is not less than the version specified
|
||||
* with the provided [major], [minor] and [patch] components.
|
||||
*/
|
||||
public fun isAtLeast(major: Int, minor: Int, patch: Int): Boolean =
|
||||
// or this.version >= versionOf(major, minor, patch)
|
||||
this.major > major || (this.major == major &&
|
||||
(this.minor > minor || this.minor == minor &&
|
||||
this.patch >= patch))
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* Maximum value a version component can have, a constant value 255.
|
||||
*/
|
||||
// NOTE: Must be placed before CURRENT because its initialization requires this field being initialized in JS
|
||||
public const val MAX_COMPONENT_VALUE = 255
|
||||
|
||||
/**
|
||||
* Returns the current version of the Kotlin standard library.
|
||||
*/
|
||||
// TODO: get from metadata or hardcode automatically during build
|
||||
public val CURRENT: KotlinVersion = KotlinVersion(1, 1, 4)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user