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