class Bundler::Resolver

def incompatibilities_for(package, version)

def incompatibilities_for(package, version)
  package_deps = @cached_dependencies[package]
  sorted_versions = @sorted_versions[package]
  package_deps[version].map do |dep_package, dep_constraint|
    low = high = sorted_versions.index(version)
    # find version low such that all >= low share the same dep
    while low > 0 && package_deps[sorted_versions[low - 1]][dep_package] == dep_constraint
      low -= 1
    end
    low =
      if low == 0
        nil
      else
        sorted_versions[low]
      end
    # find version high such that all < high share the same dep
    while high < sorted_versions.length && package_deps[sorted_versions[high]][dep_package] == dep_constraint
      high += 1
    end
    high =
      if high == sorted_versions.length
        nil
      else
        sorted_versions[high]
      end
    range = PubGrub::VersionRange.new(min: low, max: high, include_min: true)
    self_constraint = PubGrub::VersionConstraint.new(package, range: range)
    dep_term = PubGrub::Term.new(dep_constraint, false)
    self_term = PubGrub::Term.new(self_constraint, true)
    custom_explanation = if dep_package.meta? && package.root?
      "current #{dep_package} version is #{dep_constraint.constraint_string}"
    end
    PubGrub::Incompatibility.new([self_term, dep_term], cause: :dependency, custom_explanation: custom_explanation)
  end
end