Class: MessagePack::IDL::Lang::JavaGenerator
- Inherits:
-
GeneratorModule
- Object
- GeneratorModule
- MessagePack::IDL::Lang::JavaGenerator
- Defined in:
- lib/msgpack/idl/lang/java.rb
Defined Under Namespace
Classes: Context
Instance Method Summary collapse
- #format_message(t, name = t.name) ⇒ Object
- #gen_client_applications ⇒ Object
- #gen_client_services ⇒ Object
- #gen_enums ⇒ Object
- #gen_init ⇒ Object
- #gen_messages ⇒ Object
- #gen_server_applications ⇒ Object
- #gen_server_services ⇒ Object
- #gen_services ⇒ Object
- #generate! ⇒ Object
-
#initialize(ir, outdir) ⇒ JavaGenerator
constructor
A new instance of JavaGenerator.
- #render(template_fname, ctx) ⇒ Object
- #render_file(template_fname, ctx, fname) ⇒ Object
Constructor Details
#initialize(ir, outdir) ⇒ JavaGenerator
Returns a new instance of JavaGenerator.
28 29 30 31 |
# File 'lib/msgpack/idl/lang/java.rb', line 28 def initialize(ir, outdir) @ir = ir @outdir = outdir end |
Instance Method Details
#format_message(t, name = t.name) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/msgpack/idl/lang/java.rb', line 173 def (t, name = t.name) ctx = Context.new(self, :message, :super_class, :name) ctx. = t if t.super_class ctx.super_class = t.super_class.name elsif t.is_a?(IR::Exception) ctx.super_class = "RemoteError" end ctx.name = name render('message_body.java', ctx) end |
#gen_client_applications ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/msgpack/idl/lang/java.rb', line 147 def gen_client_applications ctx = Context.new(self, :namespace, :name, :scopes, :default_scope) ctx.namespace = @ir.namespace @ir.applications.each {|app| ctx.name = app.name ctx.scopes = app.scopes ctx.default_scope = app.default_scope render_file('client/application.java', ctx, "client/#{ctx.name}") } end |
#gen_client_services ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/msgpack/idl/lang/java.rb', line 125 def gen_client_services ctx = Context.new(self, :namespace, :service, :version, :functions, :name, :message_class) ctx.namespace = @ir.namespace @ir.services.each {|s| ctx.service = s s.versions.each {|v| ctx.version = v.version ctx.functions = v.functions ctx.name = "#{s.name}_#{v.version}" ctx. = (@ir.namespace + ["#{s.name}_#{v.version}"]).join('.') render_file('client/service_version.java', ctx, "client/#{ctx.name}") } v = s.versions.last ctx.version = nil ctx.functions = v.functions ctx.name = "#{s.name}" ctx. = (@ir.namespace + ["#{s.name}_#{v.version}"]).join('.') render_file('client/service_version.java', ctx, "client/#{ctx.name}") } end |
#gen_enums ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/msgpack/idl/lang/java.rb', line 51 def gen_enums ctx = Context.new(self, :namespace, :enum, :fields, :name) ctx.namespace = @ir.namespace @ir.enums.each {|t| ctx.enum = t ctx.name = t.name ctx.fields = t.fields render_file('enum.java', ctx, "#{ctx.name}") } end |
#gen_init ⇒ Object
44 45 46 47 48 49 |
# File 'lib/msgpack/idl/lang/java.rb', line 44 def gen_init @datadir = File.join(File.dirname(__FILE__), 'java') @pkgoutdir = File.join(@outdir, @ir.namespace) @engine = Tenjin::Engine.new(:cache => false) end |
#gen_messages ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/msgpack/idl/lang/java.rb', line 63 def ctx = Context.new(self, :namespace, :message, :super_class, :name) ctx.namespace = @ir.namespace @ir..each {|t| ctx. = t if t.super_class ctx.super_class = t.super_class.name end ctx.name = t.name render_file('message.java', ctx, "#{ctx.name}") } end |
#gen_server_applications ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/msgpack/idl/lang/java.rb', line 108 def gen_server_applications ctx = Context.new(self, :namespace, :name, :scopes, :default_scope) ctx.namespace = @ir.namespace service_apps = @ir.services.map {|s| scopes = [IR::Scope.new("", s, s.versions.last.version, true)] IR::Application.new(s.name, scopes) } (@ir.applications + service_apps).each {|app| ctx.name = app.name ctx.scopes = app.scopes ctx.default_scope = app.default_scope render_file('server/application.java', ctx, "server/#{ctx.name}") } end |
#gen_server_services ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/msgpack/idl/lang/java.rb', line 92 def gen_server_services ctx = Context.new(self, :namespace, :service, :version, :functions, :name, :message_class) ctx.namespace = @ir.namespace @ir.services.each {|s| ctx.service = s s.versions.each {|v| ctx.version = v.version ctx.functions = v.functions ctx.name = "#{s.name}_#{v.version}" ctx. = (@ir.namespace + ["#{s.name}_#{v.version}"]).join('.') render_file('server/service_version.java', ctx, "server/#{ctx.name}") } } end |
#gen_services ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/msgpack/idl/lang/java.rb', line 77 def gen_services ctx = Context.new(self, :namespace, :service, :version, :functions, :name) ctx.namespace = @ir.namespace @ir.services.each {|s| ctx.service = s s.versions.each {|v| ctx.version = v.version ctx.functions = v.functions ctx.name = "#{s.name}_#{v.version}" render_file('service_version.java', ctx, "#{ctx.name}") } } end |
#generate! ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/msgpack/idl/lang/java.rb', line 33 def generate! gen_init gen_enums gen_services gen_server_services gen_server_applications gen_client_services gen_client_applications end |
#render(template_fname, ctx) ⇒ Object
159 160 161 162 |
# File 'lib/msgpack/idl/lang/java.rb', line 159 def render(template_fname, ctx) template_path = File.join(@datadir, template_fname) @engine.render(template_path, ctx) end |
#render_file(template_fname, ctx, fname) ⇒ Object
164 165 166 167 168 169 170 171 |
# File 'lib/msgpack/idl/lang/java.rb', line 164 def render_file(template_fname, ctx, fname) code = render(template_fname, ctx) path = File.join(@pkgoutdir, fname) + '.java' FileUtils.mkdir_p(File.dirname(path)) File.open(path, "w") {|f| f.write(code) } end |