class Object

def MethodName(string)

def MethodName(string)
  case string
  when /#/
    type_name, method_name = string.split(/#/, 2)
    type_name or raise
    method_name or raise
    InstanceMethodName.new(type_name: TypeName(type_name), method_name: method_name.to_sym)
  when /\./
    type_name, method_name = string.split(/\./, 2)
    type_name or raise
    method_name or raise
    SingletonMethodName.new(type_name: TypeName(type_name), method_name: method_name.to_sym)
  else
    raise "Unexpected method name: #{string}"
  end
end