class Dependabot::FileParsers::Base::DependencySet

def +(other)

def +(other)
  raise ArgumentError, "must be a DependencySet" unless other.is_a?(DependencySet)
  other_names = other.dependencies.map(&:name)
  other_names.each do |name|
    all_versions = other.all_versions_for_name(name)
    all_versions.each { |dep| self << dep }
  end
  self
end

def <<(dep)

def <<(dep)
  T.must(@dependencies[key_for_dependency(dep)]) << dep
  self
end

def all_versions_for_name(name)

def all_versions_for_name(name)
  key = key_for_name(name)
  @dependencies.key?(key) ? T.must(@dependencies[key]).all_versions : []
end

def case_sensitive?

def case_sensitive?
  @case_sensitive
end

def dependencies

def dependencies
  @dependencies.values.filter_map(&:combined)
end

def dependency_for_name(name)

def dependency_for_name(name)
  key = key_for_name(name)
  @dependencies.key?(key) ? T.must(@dependencies[key]).combined : nil
end

def initialize(dependencies = [], case_sensitive: false)

def initialize(dependencies = [], case_sensitive: false)
  @case_sensitive = case_sensitive
  @dependencies = T.let(
    Hash.new { |hsh, key| hsh[key] = DependencySlot.new },
    T::Hash[String, DependencySlot]
  )
  dependencies.each { |dep| self << dep }
end

def key_for_dependency(dep)

def key_for_dependency(dep)
  key_for_name(dep.name)
end

def key_for_name(name)

def key_for_name(name)
  case_sensitive? ? name : name.downcase
end