# File lib/fastri/name_descriptor.rb, line 26
  def initialize(arg)
    @class_names = []
    @method_name = nil
    @is_class_method = nil

    case arg
    when /((?:[^:]*::)*[^:]*)(#|::|\.)(.*)$/
      ns, sep, meth_or_class = $~.captures
      # optimization attempt: try to guess the real capitalization,
      # so we get a direct hit
      @class_names = ns.split(/::/).map{|x|  x[0,1] = x[0,1].upcase; x }
      if %w[# .].include? sep
        @method_name = meth_or_class
        @is_class_method = 
          case sep
          when "#";  false
          when ".";  nil
          end
      else
        if ("A".."Z").include? meth_or_class[0,1] # 1.9 compatibility
          @class_names << meth_or_class
        else
          @method_name     = meth_or_class
          @is_class_method = true
        end
      end
    when /^[^#:.]+/
      if ("A".."Z").include? arg[0,1]
        @class_names = [arg]
      else
        @method_name     = arg.dup
        @is_class_method = nil
      end
    else
      raise RiError, "Cannot create NameDescriptor from #{arg}"
    end
  end