Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl

Issue 411913002: mojo: generate Proxies and Stubs for java bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow first pass review. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 {% from "constant_definition.tmpl" import constant_def %} 1 {% from "constant_definition.tmpl" import constant_def %}
2 {% from "enum_definition.tmpl" import enum_def %} 2 {% from "enum_definition.tmpl" import enum_def %}
3 {% from "struct_definition.tmpl" import struct_def %}
3 4
4 {%- macro declare_params(parameters) %} 5 {%- macro declare_params(parameters, boxed=false) %}
5 {%- for param in parameters -%} 6 {%- for param in parameters -%}
6 {{param.kind|java_type(False)}} {{param|name}} 7 {{param.kind|java_type(boxed)}} {{param|name}}
7 {%- if not loop.last %}, {% endif %} 8 {%- if not loop.last %}, {% endif %}
8 {%- endfor %} 9 {%- endfor %}
9 {%- endmacro %} 10 {%- endmacro %}
10 11
11 {% macro declare_request_params(method) %} 12 {% macro declare_request_params(method) %}
12 {{declare_params(method.parameters)}} 13 {{declare_params(method.parameters)}}
13 {%- if method.response_parameters != None -%} 14 {%- if method.response_parameters != None -%}
14 {%- if method.parameters %}, {% endif %} 15 {%- if method.parameters %}, {% endif %}
15 {{method|interface_response_name}} callback 16 {{method|interface_response_name}} callback
16 {%- endif -%} 17 {%- endif -%}
17 {% endmacro %} 18 {% endmacro %}
18 19
19 {%- macro declare_callback(method) -%} 20 {%- macro declare_callback(method) -%}
21
20 interface {{method|interface_response_name}} extends org.chromium.mojo.bindings. Callbacks.Callback{{method.response_parameters|length}}< 22 interface {{method|interface_response_name}} extends org.chromium.mojo.bindings. Callbacks.Callback{{method.response_parameters|length}}<
21 {%- for param in method.response_parameters -%} 23 {%- for param in method.response_parameters -%}
22 {{param.kind|java_type(True)}} 24 {{param.kind|java_type(True)}}
23 {%- if not loop.last %}, {% endif %} 25 {%- if not loop.last %}, {% endif %}
24 {%- endfor -%} 26 {%- endfor -%}
25 > { } 27 > { }
26 {%- endmacro -%} 28 {%- endmacro -%}
27 29
28 {%- macro super_class(client) -%} 30 {%- macro run_callback(variable, parameters) -%}
31 {%- if parameters -%}
32 {%- for param in parameters -%}
33 {{variable}}.{{param|name}}
34 {%- if not loop.last %}, {% endif %}
35 {%- endfor -%}
36 {%- endif -%}
37 {%- endmacro -%}
38
39 {%- macro super_class(client, with_generic=True) -%}
29 {%- if client -%} 40 {%- if client -%}
30 org.chromium.mojo.bindings.InterfaceWithClient<{{client|java_type}}> 41 org.chromium.mojo.bindings.InterfaceWithClient{% if with_generic %}<{{client|jav a_type}}>{% endif %}
31 {%- else -%} 42 {%- else -%}
32 org.chromium.mojo.bindings.Interface 43 org.chromium.mojo.bindings.Interface
33 {%- endif -%} 44 {%- endif -%}
34 {%- endmacro -%} 45 {%- endmacro -%}
35 46
47 {%- macro flags(method, is_parameter) -%}
48 {%- if not method.response_parameters -%}
49 0
50 {%- elif is_parameter: -%}
51 org.chromium.mojo.bindings.MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG
52 {%- else -%}
53 org.chromium.mojo.bindings.MessageHeader.MESSAGE_IS_RESPONSE_FLAG
54 {%- endif -%}
55 {%- endmacro -%}
56
57 {%- macro builder_class(interface, client, fqbc=False) -%}
58 {% if fqbc %}{{super_class(client, False)}}.{% endif %}Builder<{{interface|name} }, {{interface|name}}.Proxy
59 {%- if client -%}, {{client|java_type}}{%- endif -%}
60 >
61 {%- endmacro -%}
62
63 {%- macro builder_def(interface, client) -%}
64 public static final {{builder_class(interface, client, True)}} BUILDER =
65 new {{builder_class(interface, client, True)}}() {
66
67 public Proxy buildProxy(org.chromium.mojo.system.Core core,
68 org.chromium.mojo.bindings.MessageReceiverWithRespon der messageReceiver) {
69 return new Proxy(core, messageReceiver);
70 }
71
72 public Stub buildStub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
73 return new Stub(core, impl);
74 }
75
76 public {{interface|name}}[] newArray(int size) {
77 return new {{interface|name}}[size];
78 }
79 {% if client %}
80
81 protected org.chromium.mojo.bindings.Interface.Builder<{{client|java_type}}, ?> getClientBuilder() {
82 return {{client|java_type}}.BUILDER;
83 }
84 {% endif %}
85 };
86 {%- endmacro -%}
87
88 {%- macro accept_body(interface, with_response) -%}
89 {% if (interface|has_method_with_response and with_response) or
90 (interface|has_method_without_response and not with_response) %}
91 try {
92 org.chromium.mojo.bindings.MessageHeader header = message.getHeader();
93 switch(header.getType()) {
94 {% for method in interface.methods %}
95 {% if (with_response and method.response_parameters) or
96 (not with_response and not method.response_parameters) %}
97 {% set request_struct = method|struct_from_method %}
98 {% if with_response %}
99 {% set response_struct = method|response_struct_from_method %}
100 {% endif %}
101 case {{method|method_ordinal_name}}: {
102 if (!header.validateHeader({{flags(method, True)}})) {
103 return false;
104 }
105 {% if method.parameters %}
106 {{request_struct|name}} data =
107 {{request_struct|name}}.deserialize(message.getPayload() );
108 {% else %}
109 {{request_struct|name}}.deserialize(message.getPayload());
110 {% endif %}
111 getImpl().{{method|name}}({{run_callback('data', method.paramete rs)}}{% if with_response %}{% if method.parameters %}, {% endif %}new {{response _struct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()){% end if %});
112 return true;
113 }
114 {% endif %}
115 {% endfor %}
116 }
117 } catch (org.chromium.mojo.bindings.DeserializationException e) {
118 }
119 {% endif %}
120 return false;
121 {%- endmacro -%}
122
36 {% macro interface_def(interface, client) %} 123 {% macro interface_def(interface, client) %}
37 public interface {{interface|name}} extends {{super_class(client)}} { 124 public interface {{interface|name}} extends {{super_class(client)}} {
38
39 public static final Object BUILDER = new Object();
40
41 {% for constant in interface.constants %} 125 {% for constant in interface.constants %}
42 126
43 {{constant_def(constant)|indent(4)}} 127 {{constant_def(constant)|indent(4)}}
44 {% endfor %} 128 {% endfor %}
45 {% for enum in interface.enums %} 129 {% for enum in interface.enums %}
46 130
47 {{enum_def(enum, false)|indent(4)}} 131 {{enum_def(enum, false)|indent(4)}}
48 {% endfor %} 132 {% endfor %}
133
134 public interface Proxy extends {{interface|name}}, {{super_class(client, Fal se)}}.Proxy{% if client %}<{{client|java_type}}>{% endif %} {
135 }
136
137 {{builder_class(interface, client)}} BUILDER = {{interface|name}}Internal.BU ILDER;
49 {% for method in interface.methods %} 138 {% for method in interface.methods %}
50 139
51 void {{method|name}}({{declare_request_params(method)}}); 140 void {{method|name}}({{declare_request_params(method)}});
52 {% if method.response_parameters %} 141 {% if method.response_parameters %}
53 {{declare_callback(method)|indent(4)}} 142 {{declare_callback(method)|indent(4)}}
54 {% endif %} 143 {% endif %}
55 {% endfor %} 144 {% endfor %}
145 }
146 {% endmacro %}
147
148 {% macro interface_internal_def(interface, client) %}
149 class {{interface|name}}Internal {
rmcilroy 2014/08/21 14:43:52 Are you sure this is safe to do? What if there is
qsr 2014/08/22 08:11:19 It would be possible, but the reason I put it ther
rmcilroy 2014/08/26 10:18:23 That makes sense. I could still see clients wanti
qsr 2014/08/26 12:43:56 The issue with this is that all internal class are
rmcilroy 2014/08/26 17:04:03 In that case it's probably better to be in the sam
qsr 2014/08/27 07:32:26 Changed to Baz_Internal. It is not possible to gen
150
151 {{builder_def(interface, client)|indent(4)}}
152
153 {% for method in interface.methods %}
154 private static final int {{method|method_ordinal_name}} = {{method.ordinal}} ;
155 {% endfor %}
156
157 static final class Proxy extends {% if client %}org.chromium.mojo.bindings.I nterfaceWithClient.AbstractProxy<{{client|java_type}}>{% else %}org.chromium.moj o.bindings.Interface.AbstractProxy{% endif %} implements {{interface|name}}.Prox y {
158
159 Proxy(org.chromium.mojo.system.Core core,
160 org.chromium.mojo.bindings.MessageReceiverWithResponder messageRec eiver) {
161 super(core, messageReceiver);
162 }
163 {% for method in interface.methods %}
164
165 @Override
166 public void {{method|name}}({{declare_request_params(method)}}) {
167 {% set request_struct = method|struct_from_method %}
168 {{request_struct|name}} message = new {{request_struct|name}}();
169 {% for param in method.parameters %}
170 message.{{param|name}} = {{param|name}};
171 {% endfor %}
172 {% if method.response_parameters %}
173 getMessageReceiver().acceptWithResponder(
174 message.serializeWithHeader(
175 getCore(),
176 new org.chromium.mojo.bindings.MessageHeader(
177 {{method|method_ordinal_name}},
178 {{flags(method, True)}},
179 0)),
180 new {{method|response_struct_from_method|name}}ForwardToCall back(callback));
181 {% else %}
182 getMessageReceiver().accept(
183 message.serializeWithHeader(
184 getCore(),
185 new org.chromium.mojo.bindings.MessageHeader({{metho d|method_ordinal_name}})));
186 {% endif %}
187 }
188 {% endfor %}
189
190 }
191
192 static final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{ interface|name}}> {
193
194 Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
195 super(core, impl);
196 }
197
198 @Override
199 public boolean accept(org.chromium.mojo.bindings.MessageWithHeader messa ge) {
200 {{accept_body(interface, False)|indent(12)}}
201 }
202
203 @Override
204 public boolean acceptWithResponder(org.chromium.mojo.bindings.MessageWit hHeader message, org.chromium.mojo.bindings.MessageReceiver receiver) {
205 {{accept_body(interface, True)|indent(12)}}
206 }
207 }
208 {% for method in interface.methods %}
209
210 {{ struct_def(method|struct_from_method, True)|indent(4) }}
211 {% if method.response_parameters %}
212 {% set response_struct = method|response_struct_from_method %}
213
214 {{ struct_def(response_struct, True)|indent(4) }}
215
216 static class {{response_struct|name}}ForwardToCallback extends org.chromium. mojo.bindings.SideEffectFreeCloseable
217 implements org.chromium.mojo.bindings.MessageReceiver {
218 private final {{interface|name}}.{{method|interface_response_name}} mCal lback;
219
220 {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|in terface_response_name}} callback) {
221 this.mCallback = callback;
222 }
223
224 @Override
225 public boolean accept(org.chromium.mojo.bindings.MessageWithHeader messa ge) {
226 try {
227 org.chromium.mojo.bindings.MessageHeader header = message.getHea der();
228 if (!header.validateHeader({{method|method_ordinal_name}},
229 {{flags(method, False)}})) {
230 return false;
231 }
232 {{response_struct|name}} response = {{response_struct|name}}.des erialize(message.getPayload());
233 mCallback.call({{run_callback('response', method.response_parame ters)}});
234 return true;
235 } catch (org.chromium.mojo.bindings.DeserializationException e) {
236 return false;
237 }
238 }
239 }
240
241 static class {{response_struct|name}}ProxyToResponder implements {{interface |name}}.{{method|interface_response_name}} {
242
243 private final org.chromium.mojo.system.Core mCore;
244 private final org.chromium.mojo.bindings.MessageReceiver mMessageReceive r;
245 private final long mRequestId;
246
247 {{response_struct|name}}ProxyToResponder(
248 org.chromium.mojo.system.Core core,
249 org.chromium.mojo.bindings.MessageReceiver messageReceiver,
250 long requestId) {
251 mCore = core;
252 mMessageReceiver = messageReceiver;
253 mRequestId = requestId;
254 }
255
256 @Override
257 public void call({{declare_params(method.response_parameters, true)}}) {
258 {{response_struct|name}} response = new {{response_struct|name}}();
259 {% for param in method.response_parameters %}
260 response.{{param|name}} = {{param|name}};
261 {% endfor %}
262 org.chromium.mojo.bindings.MessageWithHeader message =
263 response.serializeWithHeader(
264 mCore,
265 new org.chromium.mojo.bindings.MessageHeader(
266 {{method|method_ordinal_name}},
267 {{flags(method, False)}},
268 mRequestId));
269 mMessageReceiver.accept(message);
270 }
271 }
272 {% endif %}
273 {% endfor %}
56 274
57 } 275 }
58 {% endmacro %} 276 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698