class Bundler::Resolver

def setup_solver

def setup_solver
  root = Resolver::Root.new(name_for_explicit_dependency_source)
  root_version = Resolver::Candidate.new(0)
  @all_specs = Hash.new do |specs, name|
    source = source_for(name)
    matches = source.specs.search(name)
    # Don't bother to check for circular deps when no dependency API are
    # available, since it's too slow to be usable. That edge case won't work
    # but resolution other than that should work fine and reasonably fast.
    if source.respond_to?(:dependency_api_available?) && source.dependency_api_available?
      matches = filter_invalid_self_dependencies(matches, name)
    end
    specs[name] = matches.sort_by {|s| [s.version, s.platform.to_s] }
  end
  @all_versions = Hash.new do |candidates, package|
    candidates[package] = all_versions_for(package)
  end
  @sorted_versions = Hash.new do |candidates, package|
    candidates[package] = filtered_versions_for(package).sort
  end
  @sorted_versions[root] = [root_version]
  root_dependencies = prepare_dependencies(@requirements, @packages)
  @cached_dependencies = Hash.new do |dependencies, package|
    dependencies[package] = Hash.new do |versions, version|
      versions[version] = to_dependency_hash(version.dependencies.reject {|d| d.name == package.name }, @packages)
    end
  end
  @cached_dependencies[root] = { root_version => root_dependencies }
  logger = Bundler::UI::Shell.new
  logger.level = debug? ? "debug" : "warn"
  [root, logger]
end