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

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: Update landmines Created 6 years, 3 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_for_method(method, is_parameter) -%}
48 {{flags(method.response_parameters, is_parameter)}}
49 {%- endmacro -%}
50
51 {%- macro flags(has_response_parameters, is_parameter) -%}
52 {%- if not has_response_parameters -%}
53 org.chromium.mojo.bindings.MessageHeader.NO_FLAG
54 {%- elif is_parameter: -%}
55 org.chromium.mojo.bindings.MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG
56 {%- else -%}
57 org.chromium.mojo.bindings.MessageHeader.MESSAGE_IS_RESPONSE_FLAG
58 {%- endif -%}
59 {%- endmacro -%}
60
61 {%- macro manager_class(interface, client, fully_qualified=False) -%}
62 {% if fully_qualified %}{{super_class(client, False)}}.{% endif %}Manager<{{inte rface|name}}, {{interface|name}}.Proxy
63 {%- if client -%}, {{client|java_type}}{%- endif -%}
64 >
65 {%- endmacro -%}
66
67 {%- macro manager_def(interface, client) -%}
68 public static final {{manager_class(interface, client, True)}} MANAGER =
69 new {{manager_class(interface, client, True)}}() {
70
71 public Proxy buildProxy(org.chromium.mojo.system.Core core,
72 org.chromium.mojo.bindings.MessageReceiverWithRespon der messageReceiver) {
73 return new Proxy(core, messageReceiver);
74 }
75
76 public Stub buildStub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
77 return new Stub(core, impl);
78 }
79
80 public {{interface|name}}[] buildArray(int size) {
81 return new {{interface|name}}[size];
82 }
83 {% if client %}
84
85 protected org.chromium.mojo.bindings.Interface.Manager<{{client|java_type}}, ?> getClientManager() {
86 return {{client|java_type}}.MANAGER;
87 }
88 {% endif %}
89 };
90 {%- endmacro -%}
91
92 {%- macro accept_body(interface, with_response) -%}
93 {% if (interface|has_method_with_response and with_response) or
94 (interface|has_method_without_response and not with_response) %}
95 try {
96 org.chromium.mojo.bindings.MessageHeader header = message.getHeader();
97 if (!header.validateHeader({{flags(with_response, True)}})) {
98 return false;
99 }
100 switch(header.getType()) {
101 {% for method in interface.methods %}
102 {% if (with_response and method.response_parameters) or
103 (not with_response and not method.response_parameters) %}
104 {% set request_struct = method|struct_from_method %}
105 {% if with_response %}
106 {% set response_struct = method|response_struct_from_method %}
107 {% endif %}
108 case {{method|method_ordinal_name}}: {
109 {% if method.parameters %}
110 {{request_struct|name}} data =
111 {{request_struct|name}}.deserialize(message.getPayload());
112 {% else %}
113 {{request_struct|name}}.deserialize(message.getPayload());
114 {% endif %}
115 getImpl().{{method|name}}({{run_callback('data', method.parameters)} }{% if with_response %}{% if method.parameters %}, {% endif %}new {{response_str uct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()){% endif % });
116 return true;
117 }
118 {% endif %}
119 {% endfor %}
120 default:
121 return false;
122 }
123 } catch (org.chromium.mojo.bindings.DeserializationException e) {
124 return false;
125 }
126 {% else %}
127 return false;
128 {% endif %}
129 {%- endmacro -%}
130
36 {% macro interface_def(interface, client) %} 131 {% macro interface_def(interface, client) %}
37 public interface {{interface|name}} extends {{super_class(client)}} { 132 public interface {{interface|name}} extends {{super_class(client)}} {
38
39 public static final Object BUILDER = new Object();
40
41 {% for constant in interface.constants %} 133 {% for constant in interface.constants %}
42 134
43 {{constant_def(constant)|indent(4)}} 135 {{constant_def(constant)|indent(4)}}
44 {% endfor %} 136 {% endfor %}
45 {% for enum in interface.enums %} 137 {% for enum in interface.enums %}
46 138
47 {{enum_def(enum, false)|indent(4)}} 139 {{enum_def(enum, false)|indent(4)}}
48 {% endfor %} 140 {% endfor %}
141
142 public interface Proxy extends {{interface|name}}, {{super_class(client, Fal se)}}.Proxy{% if client %}<{{client|java_type}}>{% endif %} {
143 }
144
145 {{manager_class(interface, client)}} MANAGER = {{interface|name}}_Internal.M ANAGER;
49 {% for method in interface.methods %} 146 {% for method in interface.methods %}
50 147
51 void {{method|name}}({{declare_request_params(method)}}); 148 void {{method|name}}({{declare_request_params(method)}});
52 {% if method.response_parameters %} 149 {% if method.response_parameters %}
53 {{declare_callback(method)|indent(4)}} 150 {{declare_callback(method)|indent(4)}}
54 {% endif %} 151 {% endif %}
55 {% endfor %} 152 {% endfor %}
153 }
154 {% endmacro %}
155
156 {% macro interface_internal_def(interface, client) %}
157 class {{interface|name}}_Internal {
158
159 {{manager_def(interface, client)|indent(4)}}
160
161 {% for method in interface.methods %}
162 private static final int {{method|method_ordinal_name}} = {{method.ordinal}} ;
163 {% endfor %}
164
165 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 {
166
167 Proxy(org.chromium.mojo.system.Core core,
168 org.chromium.mojo.bindings.MessageReceiverWithResponder messageRec eiver) {
169 super(core, messageReceiver);
170 }
171 {% for method in interface.methods %}
172
173 @Override
174 public void {{method|name}}({{declare_request_params(method)}}) {
175 {% set request_struct = method|struct_from_method %}
176 {{request_struct|name}} message = new {{request_struct|name}}();
177 {% for param in method.parameters %}
178 message.{{param|name}} = {{param|name}};
179 {% endfor %}
180 {% if method.response_parameters %}
181 getMessageReceiver().acceptWithResponder(
182 message.serializeWithHeader(
183 getCore(),
184 new org.chromium.mojo.bindings.MessageHeader(
185 {{method|method_ordinal_name}},
186 {{flags_for_method(method, True)}},
187 0)),
188 new {{method|response_struct_from_method|name}}ForwardToCall back(callback));
189 {% else %}
190 getMessageReceiver().accept(
191 message.serializeWithHeader(
192 getCore(),
193 new org.chromium.mojo.bindings.MessageHeader({{metho d|method_ordinal_name}})));
194 {% endif %}
195 }
196 {% endfor %}
197
198 }
199
200 static final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{ interface|name}}> {
201
202 Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
203 super(core, impl);
204 }
205
206 @Override
207 public boolean accept(org.chromium.mojo.bindings.MessageWithHeader messa ge) {
208 {{accept_body(interface, False)|indent(12)}}
209 }
210
211 @Override
212 public boolean acceptWithResponder(org.chromium.mojo.bindings.MessageWit hHeader message, org.chromium.mojo.bindings.MessageReceiver receiver) {
213 {{accept_body(interface, True)|indent(12)}}
214 }
215 }
216 {% for method in interface.methods %}
217
218 {{ struct_def(method|struct_from_method, True)|indent(4) }}
219 {% if method.response_parameters %}
220 {% set response_struct = method|response_struct_from_method %}
221
222 {{ struct_def(response_struct, True)|indent(4) }}
223
224 static class {{response_struct|name}}ForwardToCallback extends org.chromium. mojo.bindings.SideEffectFreeCloseable
225 implements org.chromium.mojo.bindings.MessageReceiver {
226 private final {{interface|name}}.{{method|interface_response_name}} mCal lback;
227
228 {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|in terface_response_name}} callback) {
229 this.mCallback = callback;
230 }
231
232 @Override
233 public boolean accept(org.chromium.mojo.bindings.MessageWithHeader messa ge) {
234 try {
235 org.chromium.mojo.bindings.MessageHeader header = message.getHea der();
236 if (!header.validateHeader({{method|method_ordinal_name}},
237 {{flags_for_method(method, False)}})) {
238 return false;
239 }
240 {{response_struct|name}} response = {{response_struct|name}}.des erialize(message.getPayload());
241 mCallback.call({{run_callback('response', method.response_parame ters)}});
242 return true;
243 } catch (org.chromium.mojo.bindings.DeserializationException e) {
244 return false;
245 }
246 }
247 }
248
249 static class {{response_struct|name}}ProxyToResponder implements {{interface |name}}.{{method|interface_response_name}} {
250
251 private final org.chromium.mojo.system.Core mCore;
252 private final org.chromium.mojo.bindings.MessageReceiver mMessageReceive r;
253 private final long mRequestId;
254
255 {{response_struct|name}}ProxyToResponder(
256 org.chromium.mojo.system.Core core,
257 org.chromium.mojo.bindings.MessageReceiver messageReceiver,
258 long requestId) {
259 mCore = core;
260 mMessageReceiver = messageReceiver;
261 mRequestId = requestId;
262 }
263
264 @Override
265 public void call({{declare_params(method.response_parameters, true)}}) {
266 {{response_struct|name}} response = new {{response_struct|name}}();
267 {% for param in method.response_parameters %}
268 response.{{param|name}} = {{param|name}};
269 {% endfor %}
270 org.chromium.mojo.bindings.MessageWithHeader message =
271 response.serializeWithHeader(
272 mCore,
273 new org.chromium.mojo.bindings.MessageHeader(
274 {{method|method_ordinal_name}},
275 {{flags_for_method(method, False)}},
276 mRequestId));
277 mMessageReceiver.accept(message);
278 }
279 }
280 {% endif %}
281 {% endfor %}
56 282
57 } 283 }
58 {% endmacro %} 284 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698