override fun compareTo()

in rider/src/main/kotlin/com/jetbrains/rider/plugins/unity/util/SemVer.kt [36:79]


    override fun compareTo(other: SemVer): Int {
        if (major > other.major) return 1
        if (major < other.major) return -1
        if (minor > other.minor) return 1
        if (minor < other.minor) return -1
        if (patch > other.patch) return 1
        if (patch < other.patch) return -1

        // Non-null pre-release has lower precedence
        if (prerelease == null && other.prerelease == null) return 0
        if (other.prerelease == null) return -1
        if (prerelease == null) return 1

        val segments = prerelease.split(".")
        val otherSegments = other.prerelease.split(".")

        val commonSegments = min(segments.size, otherSegments.size)
        for (i in 0..(commonSegments - 1)) {
            val segment = segments[i]
            val otherSegment = otherSegments[i]

            val digitVal = segment.toIntOrNull()
            val otherDigitVal = segment.toIntOrNull()

            // Numeric has lower precedence than non-numeric
            if (digitVal == null && otherDigitVal != null) return 1
            if (digitVal != null && otherDigitVal == null) return -1

            if (digitVal != null && otherDigitVal != null) {
                if (digitVal > otherDigitVal) return 1
                if (digitVal < otherDigitVal) return -1
            }
            else {
                if (segment > otherSegment) return 1
                if (segment < otherSegment) return -1
            }
        }

        // More segments has higher precedence
        if (segments.size > otherSegments.size) return 1
        if (segments.size < otherSegments.size) return -1

        return 0
    }