class Bundler::Resolver

def all_versions_for(package)

def all_versions_for(package)
  name = package.name
  results = (@base[name] + filter_prereleases(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }
  if name == "bundler" && !bundler_pinned_to_current_version?
    bundler_spec = Gem.loaded_specs["bundler"]
    results << bundler_spec if bundler_spec
  end
  locked_requirement = base_requirements[name]
  results = filter_matching_specs(results, locked_requirement) if locked_requirement
  results.group_by(&:version).reduce([]) do |groups, (version, specs)|
    platform_specs = package.platforms.map {|platform| select_best_platform_match(specs, platform) }
    # If package is a top-level dependency,
    #   candidate is only valid if there are matching versions for all resolution platforms.
    #
    # If package is not a top-level deependency,
    #   then it's not necessary that it has matching versions for all platforms, since it may have been introduced only as
    #   a dependency for a platform specific variant, so it will only need to have a valid version for that platform.
    #
    if package.top_level?
      next groups if platform_specs.any?(&:empty?)
    else
      next groups if platform_specs.all?(&:empty?)
    end
    platform_specs.flatten!
    ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
    groups << Resolver::Candidate.new(version, specs: ruby_specs) if ruby_specs.any?
    next groups if platform_specs == ruby_specs || package.force_ruby_platform?
    groups << Resolver::Candidate.new(version, specs: platform_specs)
    groups
  end
end