in src/main/scala/kotlin/KotlinVersion.scala [90:125]
override def compareTo(that: Kind): Int = (this, that) match {
// same kinds
case (Kind.Release, Kind.Release) =>
0
case (Kind.ReleaseCandidate(num1), Kind.ReleaseCandidate(num2)) =>
num1.compareTo(num2)
case (Kind.Beta(num1), Kind.Beta(num2)) =>
num1.compareTo(num2)
case (Kind.Eap(num1), Kind.Eap(num2)) =>
num1.compareTo(num2)
case (Kind.Milestone(num1), Kind.Milestone(num2)) =>
if (num1.isEmpty && num2.contains(1) || num2.isEmpty && num1.contains(1)) 0
else num1.compareTo(num2)
case (Kind.ForIde(_, parts1), Kind.ForIde(_, parts2)) =>
parts1.compareTo(parts2)
case (Kind.Dev, Kind.Dev) =>
0
case (Kind.Snapshot, Kind.Snapshot) =>
0
// different kinds: Snapshot < Milestone < Eap < Beta < ReleaseCandidate < Release < Dev < ForIde
case (Kind.Snapshot, _) => -1
case (_, Kind.Snapshot) => 1
case (Kind.Milestone(_), _) => -1
case (_, Kind.Milestone(_)) => 1
case (Kind.Eap(_), _) => -1
case (_, Kind.Eap(_)) => 1
case (Kind.Beta(_), _) => -1
case (_, Kind.Beta(_)) => 1
case (Kind.ReleaseCandidate(_), _) => -1
case (_, Kind.ReleaseCandidate(_)) => 1
case (Kind.Release, _) => -1
case (_, Kind.Release) => 1
case (Kind.Dev, _) => -1
case (_, Kind.Dev) => 1
}