def description
result = ''
if owner <= Module
result << receiver.to_s << '.'
else
result << owner.name.to_s << '#'
end
result << name.to_s << '('
if respond_to?(:parameters)
generated_name = 'x0'
result << parameters.map { |p_type, p_name|
p_name ||= generated_name.succ!
case p_type
when :block
"&#{p_name}"
when :rest
"*#{p_name}"
when :keyrest
"**#{p_name}"
when :req
p_name
when :opt
"#{p_name}="
when :key
"#{p_name}:"
else
[ p_name, p_type ] * ':'
end
} * ','
else
result << arity.to_s
end
result << ')'
end