in src/org/jetbrains/r/packages/RPackageProjectManager.kt [162:174]
fun foldBounds(bounds: List<SplitPackageInfo>, isLower: Boolean): DependencyVersionBound? {
val initialVersion = if (isLower) "" else "z"
val opList = if (isLower) listOf(">", ">=", "==") else listOf("<", "<=", "==")
val strictOp = if (isLower) ">" else "<"
val compareResult = { a: String, b: String -> if (isLower) a < b else a > b }
return bounds.filter { it.comparisonOp in opList }.fold(DependencyVersionBound(initialVersion)) { acc, info ->
val infoStrict = info.comparisonOp == strictOp
if (compareResult(acc.version, info.version) || (acc.version == info.version && acc.strict < infoStrict)) {
DependencyVersionBound(info.version, infoStrict)
}
else acc
}.let { if (it.version == initialVersion) null else it }
}