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

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

Issue 364063006: JAVA BINDINGS WIP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updates Created 6 years, 5 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
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
28 {%- macro super_class(client) -%} 39 {%- macro super_class(client) -%}
29 {%- if client -%} 40 {%- if client -%}
30 org.chromium.mojo.bindings.InterfaceWithClient<{{client|java_type}}> 41 org.chromium.mojo.bindings.InterfaceWithClient<{{client|java_type}}>
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
36 {% macro interface_def(interface, client) %} 57 {% macro interface_def(interface, client) %}
37 public interface {{interface|name}} extends {{super_class(client)}} { 58 public interface {{interface|name}} extends {{super_class(client)}} {
38 {% for constant in interface.constants %} 59 {% for constant in interface.constants %}
39 60
40 {{constant_def(constant)|indent(4)}} 61 {{constant_def(constant)|indent(4)}}
41 {% endfor %} 62 {% endfor %}
42 {% for enum in interface.enums %} 63 {% for enum in interface.enums %}
43 64
44 {{enum_def(enum, false)|indent(4)}} 65 {{enum_def(enum, false)|indent(4)}}
45 {% endfor %} 66 {% endfor %}
67
68 public static final Builder<{% if client %}{{client|java_type}}, {% endif %} {{interface|name}}, Proxy> BUILDER = new Builder<{% if client %}{{client|java_ty pe}}, {% endif %}{{interface|name}}, Proxy>({% if client %}{% if client == inter face %}null{% else %}{{client|java_type}}.BUILDER{% endif %}{% endif %}) {
69
70 public Proxy buildProxy(org.chromium.mojo.system.Core core, org.chro mium.mojo.bindings.MessageReceiverWithResponder messageReceiver) {
71 return new Proxy(core, messageReceiver);
72 }
73
74 public Stub buildStub(org.chromium.mojo.system.Core core, {{interfac e|name}} impl) {
75 return new Stub(core, impl);
76 }
77
78 public {{interface|name}}[] newArray(int size) {
79 return new {{interface|name}}[size];
80 }
81
82 };
46 {% for method in interface.methods %} 83 {% for method in interface.methods %}
47 84
48 void {{method|name}}({{declare_request_params(method)}}); 85 void {{method|name}}({{declare_request_params(method)}});
49 {% if method.response_parameters %} 86 {% if method.response_parameters %}
50 {{declare_callback(method)|indent(4)}} 87 {{declare_callback(method)|indent(4)}}
51 {% endif %} 88 {% endif %}
52 {% endfor %} 89 {% endfor %}
53 90
91 public final class Proxy extends {% if client %}org.chromium.mojo.bindings.I nterfaceWithClient.Proxy<{{client|java_type}}>{% else %}org.chromium.mojo.bindin gs.Interface.Proxy{% endif %} implements {{interface|name}} {
92
93 public Proxy(org.chromium.mojo.system.Core core, org.chromium.mojo.bindi ngs.MessageReceiverWithResponder messageReceiver) {
94 super(core, messageReceiver);
95 }
96 {% for method in interface.methods %}
97
98 @Override
99 public void {{method|name}}({{declare_request_params(method)}}) {
100 {% set request_struct = method|struct_from_method %}
101 {{interface|name}}Internal.{{request_struct|name}} message = new {{i nterface|name}}Internal.{{request_struct|name}}();
102 {% for param in method.parameters %}
103 message.{{param|name}} = {{param|name}};
104 {% endfor %}
105 {% if method.response_parameters %}
106 getMessageReceiver().acceptWithResponder(
107 message.serializeWithHeader(getCore(),
108 new org.chromium.mojo.bindings.Messa geHeader({{method.ordinal}}, {{flags(method, True)}}, 0)),
109 new {{interface|name}}Internal.{{method|response_struct_from _method|name }}ForwardToCallback(callback));
110 {% else %}
111 getMessageReceiver().accept(message.serializeWithHeader(getCore(),
112 new org.chro mium.mojo.bindings.MessageHeader({{method.ordinal}}, {{flags(method, True)}})));
113 {% endif %}
114 }
115 {% endfor %}
116
117 }
118
119 public final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{ interface|name}}> {
120
121 public Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
122 super(core, impl);
123 }
124
125 @Override
126 public boolean accept(org.chromium.mojo.bindings.Message message) {
127 try {
128 org.chromium.mojo.bindings.MessageHeader header = message.getHea der();
129 org.chromium.mojo.bindings.Message payload = message.getPayload( );
130 switch(header.getType()) {
131 {% for method in interface.methods %}
132 {% if not method.response_parameters %}
133 {% set request_struct = method|struct_from_method %}
134 case {{method.ordinal}}: {
135 if (!header.validateHeader({{flags(method, True)}})) {
136 return false;
137 }
138 {{interface|name}}Internal.{{request_struct|name}} d ata = {{interface|name}}Internal.{{request_struct|name}}.deserialize(payload);
139 getImpl().{{method|name}}({{run_callback('data', met hod.parameters)}});
140 return true;
141 }
142 {% endif %}
143 {% endfor %}
144 }
145 } catch (org.chromium.mojo.bindings.DeserializationException e) {
146 }
147 return false;
148 }
149
150 @Override
151 public boolean acceptWithResponder(org.chromium.mojo.bindings.Message me ssage, org.chromium.mojo.bindings.MessageReceiver receiver) {
152 try {
153 org.chromium.mojo.bindings.MessageHeader header = message.getHe ader();
154 org.chromium.mojo.bindings.Message payload = message.getPayload( );
155 switch(header.getType()) {
156 {% for method in interface.methods %}
157 {% if method.response_parameters %}
158 {% set request_struct = method|struct_from_method %}
159 {% set response_struct = method|response_struct_from_method %}
160 case {{method.ordinal}}: {
161 if (!header.validateHeader({{flags(method, True)}})) {
162 return false;
163 }
164 {{interface|name}}Internal.{{request_struct|name}} d ata = {{interface|name}}Internal.{{request_struct|name}}.deserialize(payload);
165 getImpl().{{method|name}}({{run_callback('data', met hod.parameters)}}{% if method.parameters %}, {% endif %}new {{interface|name}}In ternal.{{response_struct|name}}ProxyToResponder(getCore(), receiver, header.getR equestId()));
166 return true;
167 }
168 {% endif %}
169 {% endfor %}
170 }
171 } catch (org.chromium.mojo.bindings.DeserializationException e) {
172 }
173 return false;
174 }
175
176 }
177 }
178 {% endmacro %}
179
180 {% macro interface_internal_def(interface) %}
181 class {{interface|name}}Internal {
182 {% for method in interface.methods %}
183
184 {{ struct_def(method|struct_from_method, True)|indent(4) }}
185 {% if method.response_parameters %}
186 {% set response_struct = method|response_struct_from_method %}
187
188 {{ struct_def(response_struct, True)|indent(4) }}
189
190 static class {{response_struct|name}}ForwardToCallback implements org.chromi um.mojo.bindings.MessageReceiver {
191 private final {{interface|name}}.{{method|interface_response_name}} mCal lback;
192
193 {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|in terface_response_name}} callback) {
194 this.mCallback = callback;
195 }
196
197 @Override
198 public boolean accept(org.chromium.mojo.bindings.Message message) {
199 try {
200 org.chromium.mojo.bindings.MessageHeader header = message.getHea der();
201 if (!header.validateHeader({{method.ordinal}}, {{flags(method, F alse)}})) {
202 return false;
203 }
204 org.chromium.mojo.bindings.Message payload = message.getPayload( );
205 {{response_struct|name}} response = {{response_struct|name}}.des erialize(payload);
206 mCallback.call({{run_callback('response', method.response_parame ters)}});
207 return true;
208 } catch (org.chromium.mojo.bindings.DeserializationException e) {
209 return false;
210 }
211 }
212 }
213
214 static class {{response_struct|name}}ProxyToResponder implements {{interface |name}}.{{method|interface_response_name}} {
215
216 private final org.chromium.mojo.system.Core mCore;
217 private final org.chromium.mojo.bindings.MessageReceiver mMessageReceive r;
218 private final long mRequestId;
219
220 {{response_struct|name}}ProxyToResponder(org.chromium.mojo.system.Core c ore, org.chromium.mojo.bindings.MessageReceiver messageReceiver, long requestId) {
221 mCore = core;
222 mMessageReceiver = messageReceiver;
223 mRequestId = requestId;
224 }
225
226 @Override
227 public void call({{declare_params(method.response_parameters, true)}}) {
228 {{response_struct|name}} response = new {{response_struct|name}}();
229 {% for param in method.response_parameters %}
230 response.{{param|name}} = {{param|name}};
231 {% endfor %}
232 org.chromium.mojo.bindings.Message message = response.serializeWithH eader(mCore, new org.chromium.mojo.bindings.MessageHeader({{method.ordinal}}, {{ flags(method, False)}}, mRequestId));
233 mMessageReceiver.accept(message);
234 }
235 }
236 {% endif %}
237 {% endfor %}
238
54 } 239 }
55 {% endmacro %} 240 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698