# File lib/rgen/instantiator/qualified_name_resolver.rb, line 25
  def resolveIdentifier(qualifiedName)
    return @elementByQName[qualifiedName] if @elementByQName.has_key?(qualifiedName)
    path = qualifiedName.split(separator).reject{|s| s == ""}
    if path.size > 1
      parentQName = (leadingSeparator ? separator : "") + path[0..-2].join(separator)
      parents = resolveIdentifier(parentQName)
      parents = [parents].compact unless parents.is_a?(Array)
      children = parents.collect{|p| allNamedChildren(p)}.flatten
    elsif path.size == 1
      parentQName = ""
      children = allRootNamedChildren
    else
      return @elementByQName[qualifiedName] = nil
    end
    # if the parent was already visited all matching elements are the hash 

    if !@visitedQName[parentQName]
      children.each do |c|
        name = c.send(nameAttribute)
        if name
          qname = parentQName + ((parentQName != "" || leadingSeparator) ? separator : "") + name
          existing = @elementByQName[qname]
          if existing 
            @elementByQName[qname] = [existing] unless existing.is_a?(Array)
            @elementByQName[qname] << c
          else
            @elementByQName[qname] = c 
          end
        end
      end
      # all named children of praent have been checked and hashed

      @visitedQName[parentQName] = true
    end
    @elementByQName[qualifiedName] ||= nil
  end