blob: 583dbaf350dd881df7ef756bef9c330f5f9b0bf5 [file] [log] [blame]
###############################################################################
# Copyright (c) 2005, 2007 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
###############################################################################
require 'set'
class String
def javacase
repl = self.gsub('::', '_')
"#{repl[0..0].downcase}#{repl[1..-1]}"
end
def to_java_string
'"' + self + '"'
end
end
[].each do |klass|
sup = klass.superclass
puts "#{klass.name}"
klass.instance_methods(false).each { |m| puts " #{m}" }
puts "#{klass.name}.class"
klass.methods(false).each { |m| puts " #{m}" }
end
def put_methods!(metaclass)
i = metaclass.included_modules
ms = metaclass.public_instance_methods(false)
for t in i do; ms -= t.public_instance_methods(true); end
$data << "\t\npublic\n"
for i in ms do
put_rdoc(metaclass.name + "." + i.to_s)
$data << <<-"END"
def #{i.to_s} (#{generateArgs(metaclass.instance_method(i).arity)})
end
END
end
ms = metaclass.protected_instance_methods(false)
for t in i do;
if t.respond_to?(:protected_instance_methods) then
ms -= t.protected_instance_methods(true)
end
end
$data << "\t\nprotected\n"
for i in ms do
put_rdoc(metaclass.name + "." + i.to_s)
$data << <<-"END"
def #{i.to_s} (#{generateArgs(metaclass.instance_method(i).arity)})
end
END
end
ms = metaclass.private_instance_methods(false)
for t in i do;
if t.respond_to?(:private_instance_methods) then
ms -= t.private_instance_methods(true)
end
end
$data << "\t\nprivate\n"
for i in ms do
put_rdoc(metaclass.name + "." + i.to_s)
$data << <<-"END"
def #{i.to_s} (#{generateArgs(metaclass.instance_method(i).arity)})
end
END
end
end
def generateArgs(arity)
if arity < 0 then
return "*args"
end
result = ""
for i in 1..arity do
result << "arg" + i.to_s
if i != arity then
result << ", "
end
end
result
end
def put_singleton_methods!(metaclass)
# if (metaclass.is_a?(Class))
# $data << <<-"END2"
# class << self
# END2
# else
# $data << "\t\tprivate\n"
# end
# ms = (metaclass.public_methods(false) - Class.instance_methods(false)).each { |m|
ms = (metaclass.singleton_methods(false)).each { |m|
$data << <<-"END2"
def self.#{m.to_s} (#{generateArgs(metaclass.method(m).arity)})
end
END2
}
# if (metaclass.is_a?(Class))
# $data << <<-"END2"
# end
# END2
# end
end
def put_included_modules!(metaclass)
ms = (metaclass.included_modules -
((metaclass.is_a?(Class) &&
metaclass.superclass &&
metaclass.superclass.included_modules) || []))
for in_mod in ms do
$data << <<-"END"
include #{in_mod.name}
END
end
end
def put_singleton_included_modules!(metaclass)
$data << <<-"END2"
class << ::#{metaclass.name}
END2
sup = (class << metaclass; superclass; end)
# ms = ((class << metaclass; included_modules; end) -
# ((sup && sup.included_modules) || []))
ms = (class << metaclass; included_modules; end)
for in_mod in ms do
$data << <<-"END"
include #{in_mod.name}
END
end
$data << <<-"END2"
end
END2
end
def put_superclass!(metaclass)
return if metaclass.superclass.nil?
$data << <<-"END"
#{const_for(metaclass)}.setSuperClass(#{const_for(metaclass.superclass)});
END
end
#def put_singleton_superclass!(metaclass)
# $data << <<-"END"
# #{const_for_singleton(metaclass)}.setSuperClass(#{const_for(metaclass.class)});
# END
#end
def dumpClass(klass)
name = klass.name
if name == "NameError::message" || name == "fatal" then
return
end
sc = klass.superclass
if sc then scname = " < ::" + sc.name else scname = "" end
# methods = klass.instance_methods(false)
put_rdoc(name)
$data << <<-"END"
class #{name} #{scname}
END
put_included_modules!(klass)
put_singleton_included_modules!(klass)
put_methods!(klass)
put_singleton_methods!(klass)
$data << <<-"END"
end
END
end
def put_rdoc(name)
return
print "Getting doc for " + name + "\n"
rdoc = `d:\\instantrails\\ruby\\bin\\ri.bat \"#{name}\" -f html`
rdoc.to_a.each { |line|
$data << "#" + line
}
end
def dumpModule(klass)
name = klass.name
# methods = klass.instance_methods(false)
put_rdoc(name)
$data << <<-"END"
module #{name}
END
put_included_modules!(klass)
put_methods!(klass)
put_singleton_methods!(klass)
$data << <<-"END"
end
END
end
def dumpVariables
$data << "# Global variables\n"
global_variables.each { |var|
$data << <<-"END"
#{var.to_s} = #{var.to_s}
END
}
end
def process_all
classes = Set.new
known_modules = Set.new #[Enumerable, Comparable]
ObjectSpace.each_object do |o|
classes << o if o.is_a?(Class)
known_modules << o if o.is_a?(Module)
end
known_modules = (known_modules - classes).to_a
classes = classes.to_a.sort { |a,b| a.name <=> b.name }
classes.each { |c|
$data = ""
dumpClass(c)
filename = c.name
pos = filename.index(':')
if pos then
filename = filename.slice(0..pos-1)
#puts "sliced " + filename
end
file = filename + ".rb"
puts "#### DLTK RUBY BUILTINS ####" + file + "\n"
puts $data
#File.open(file, 'a') {|f| f.write $data}
}
known_modules.each { |c|
$data = ""
dumpModule(c)
filename = c.name
pos = filename.index(':')
if pos then
filename = filename.slice(0..pos-1)
#puts "sliced " + filename
end
file = filename + ".rb"
puts "#### DLTK RUBY BUILTINS ####" + file + "\n"
puts $data
#File.open(file, 'a') {|f| f.write $data}
}
ccc = Module.constants.to_a
known_modules.each { |x|
ccc.delete(x.to_s)
}
classes.each { |x|
ccc.delete(x.to_s)
}
puts "#### DLTK RUBY BUILTINS ####constants.rb\n\n\n"
ccc.each { |bar|
puts "#{bar} = #{Module.const_get(bar).class.to_s}.new"
}
end
process_all