Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
This paste will be private.
module Inline require 'java' class Java $CLASSPATH << Inline.directory JFile = java.io.File import javax.tools.ToolProvider import javax.tools.SimpleJavaFileObject import javax.tools.StandardLocation def initialize(mod) @context = mod @src = "" @imports = [] @sigs = [] end def import(cls) @imports << cls end def load_cache false end def java(src) @src << src << "\n" signature = @src.match(/public static\W+(\w+)\W+([a-zA-Z0-9_]+)\((.*)\)/) raise "Could not parse method signature" unless signature @sigs << [signature[1], signature[2], signature[3]] end def build compiler = ToolProvider.system_java_compiler file_mgr = compiler.get_standard_file_manager(nil, nil, nil) file_mgr.set_location(StandardLocation::CLASS_OUTPUT, [JFile.new(Inline.directory)]) @name = "Java#{@src.hash.abs}" imports = "import " + @imports.join(";\nimport ") + ";" if @imports.size > 0 full_src = " #{imports} public class #{@name} { #{@src} } " filename = "#{Inline.directory}/#{@name}.java" File.open(filename, "w") {|file| file.write(full_src)} file_objs = file_mgr.get_java_file_objects_from_strings([filename]) compiler.get_task(nil, file_mgr, nil, nil, nil, file_objs).call file_mgr.close end def load @sigs.each do |sig| @context.module_eval "const_set :#{@name}, ::Java.const_get(:#{@name}); def #{sig[1]}(*args); #{@name}.#{sig[1]}(*args); end" end end end end
Pasted March 06, 2008 8:11PM EDT
by headius
Channel #jruby on irc.freenode.com
Embed