56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/java_inline.rb', line 56
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)])
if @pkg
directory = "#{Inline.directory}/#{@pkg.gsub('.', '/')}"
unless File.directory? directory then
$stderr.puts "NOTE: creating #{directory} for RubyInline" if $DEBUG
FileUtils.mkdir_p directory
end
@name = "Java#{@src.hash.abs}"
@load_name = "#{@pkg}.#{@name}"
filename = "#{directory}/#{@name}.java"
imports = "import " + @imports.join(";\nimport ") + ";" if @imports.size > 0
full_src = "
package #{@pkg};
#{imports}
public class #{@name} {
#{@src}
}
"
else
@load_name = @name = "Java#{@src.hash.abs}"
filename = "#{Inline.directory}/#{@name}.java"
imports = "import " + @imports.join(";\nimport ") + ";" if @imports.size > 0
full_src = "
#{imports}
public class #{@name} {
#{@src}
}
"
end
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
|