fun foldBounds()

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 }
      }