class Bundler::SpecSet

def for(dependencies, check = false, platforms = [nil])

def for(dependencies, check = false, platforms = [nil])
  handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
  deps = dependencies.product(platforms)
  specs = []
  loop do
    break unless dep = deps.shift
    name = dep[0].name
    platform = dep[1]
    incomplete = false
    key = [name, platform]
    next if handled.key?(key)
    handled[key] = true
    specs_for_dep = specs_for_dependency(*dep)
    if specs_for_dep.any?
      specs.concat(specs_for_dep)
      specs_for_dep.first.dependencies.each do |d|
        next if d.type == :development
        incomplete = true if d.name != "bundler" && lookup[d.name].nil?
        deps << [d, dep[1]]
      end
    else
      incomplete = true
    end
    if incomplete && check
      @incomplete_specs += lookup[name] || [LazySpecification.new(name, nil, nil)]
    end
  end
  specs.uniq
end