require 'rubygems'
require 'parse_tree'

class Class
def arguments(method)
# @_args used for caching the values
@_args = Hash.new unless @_args
unless @_args.has_key?(method)
sexp_array = ParseTree.translate(self, method)
@_args[method] = self.class.arg_search(sexp_array)
end
@_args[method]
end

private

def self.arg_search(sexp_array)
if sexp_array.shift == :args
sexp_array.find_all { |e| e.kind_of?(Symbol) }
else
sexp_array.each do |node|
if node.kind_of?(Array)
args = arg_search(node)
return args if args
end
end
nil
end
end
end

class X
def y(a, b, d = 2, e = 'hello world')
end

def z
end

def w(alpha, beta, gamma)
end
end

puts X.arguments(:y).inspect
puts X.arguments(:z).inspect
puts X.arguments(:w).inspect