module Inline require 'java' class Java import javax.tools.ToolProvider import javax.tools.SimpleJavaFileObject compiler = ToolProvider.system_java_compiler file_mgr = compiler.get_standard_file_manager(nil, nil, nil) # because we can't invoke the super constructor on SimpleJavaFileObject # (it's protected...GRR) I generate a little Java file and compile it # on the fly File.open("#{Inline.directory}/SourceString.java", "w") do |file| file.write < 0 full_src = " #{imports} public class #{@name} { #{@src} } " string_src = SourceString.new(@name, full_src) @compiler.get_task(nil, @file_mgr, nil, nil, nil, [string_src]).call end def load @sigs.each do |sig| @context.module_eval "const_set :#{@name}, ::Java.const_get(:#{@name}); puts '#{sig[1]}'; def #{sig[1]}(*args); #{@name}.#{sig[1]}(*args); end" end end end end