OLD | NEW |
---|---|
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 %} |
OLD | NEW |