| OLD | NEW |
| (Empty) |
| 1 {% from "constant_definition.tmpl" import constant_def %} | |
| 2 {% from "enum_definition.tmpl" import enum_def %} | |
| 3 {% from "struct_definition.tmpl" import struct_def %} | |
| 4 | |
| 5 {%- macro declare_params(parameters, boxed=false) %} | |
| 6 {%- for param in parameters -%} | |
| 7 {{param.kind|java_type(boxed)}} {{param|name}} | |
| 8 {%- if not loop.last %}, {% endif %} | |
| 9 {%- endfor %} | |
| 10 {%- endmacro %} | |
| 11 | |
| 12 {% macro declare_request_params(method) %} | |
| 13 {{declare_params(method.parameters)}} | |
| 14 {%- if method.response_parameters != None -%} | |
| 15 {%- if method.parameters %}, {% endif %} | |
| 16 {{method|interface_response_name}} callback | |
| 17 {%- endif -%} | |
| 18 {% endmacro %} | |
| 19 | |
| 20 {%- macro declare_callback(method) -%} | |
| 21 | |
| 22 interface {{method|interface_response_name}} extends org.chromium.mojo.bindings.
Callbacks.Callback{{method.response_parameters|length}}{% if method.response_par
ameters %}< | |
| 23 {%- for param in method.response_parameters -%} | |
| 24 {{param.kind|java_type(True)}} | |
| 25 {%- if not loop.last %}, {% endif %} | |
| 26 {%- endfor -%} | |
| 27 >{% endif %} { } | |
| 28 {%- endmacro -%} | |
| 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 | |
| 39 {%- macro super_class(client, with_generic=True) -%} | |
| 40 {%- if client -%} | |
| 41 org.chromium.mojo.bindings.InterfaceWithClient{% if with_generic %}<{{client|jav
a_type}}>{% endif %} | |
| 42 {%- else -%} | |
| 43 org.chromium.mojo.bindings.Interface | |
| 44 {%- endif -%} | |
| 45 {%- endmacro -%} | |
| 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 String getName() { | |
| 72 return "{{namespace|replace(".","::")}}::{{interface.name}}"; | |
| 73 } | |
| 74 | |
| 75 public Proxy buildProxy(org.chromium.mojo.system.Core core, | |
| 76 org.chromium.mojo.bindings.MessageReceiverWithRespon
der messageReceiver) { | |
| 77 return new Proxy(core, messageReceiver); | |
| 78 } | |
| 79 | |
| 80 public Stub buildStub(org.chromium.mojo.system.Core core, {{interface|name}}
impl) { | |
| 81 return new Stub(core, impl); | |
| 82 } | |
| 83 | |
| 84 public {{interface|name}}[] buildArray(int size) { | |
| 85 return new {{interface|name}}[size]; | |
| 86 } | |
| 87 {% if client %} | |
| 88 | |
| 89 protected org.chromium.mojo.bindings.Interface.Manager<{{client|java_type}},
?> getClientManager() { | |
| 90 return {{client|java_type}}.MANAGER; | |
| 91 } | |
| 92 {% endif %} | |
| 93 }; | |
| 94 {%- endmacro -%} | |
| 95 | |
| 96 {%- macro accept_body(interface, with_response) -%} | |
| 97 {% if (interface|has_method_with_response and with_response) or | |
| 98 (interface|has_method_without_response and not with_response) %} | |
| 99 try { | |
| 100 org.chromium.mojo.bindings.ServiceMessage messageWithHeader = | |
| 101 message.asServiceMessage(); | |
| 102 org.chromium.mojo.bindings.MessageHeader header = messageWithHeader.getHeade
r(); | |
| 103 if (!header.validateHeader({{flags(with_response, True)}})) { | |
| 104 return false; | |
| 105 } | |
| 106 switch(header.getType()) { | |
| 107 {% for method in interface.methods %} | |
| 108 {% if (with_response and method.response_parameters != None) or | |
| 109 (not with_response and method.response_parameters == None) %} | |
| 110 {% set request_struct = method|struct_from_method %} | |
| 111 {% if with_response %} | |
| 112 {% set response_struct = method|response_struct_from_method %} | |
| 113 {% endif %} | |
| 114 case {{method|method_ordinal_name}}: { | |
| 115 {% if method.parameters %} | |
| 116 {{request_struct|name}} data = | |
| 117 {{request_struct|name}}.deserialize(messageWithHeader.getPay
load()); | |
| 118 {% else %} | |
| 119 {{request_struct|name}}.deserialize(messageWithHeader.getPayload()); | |
| 120 {% endif %} | |
| 121 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 %
}); | |
| 122 return true; | |
| 123 } | |
| 124 {% endif %} | |
| 125 {% endfor %} | |
| 126 default: | |
| 127 return false; | |
| 128 } | |
| 129 } catch (org.chromium.mojo.bindings.DeserializationException e) { | |
| 130 return false; | |
| 131 } | |
| 132 {% else %} | |
| 133 return false; | |
| 134 {% endif %} | |
| 135 {%- endmacro -%} | |
| 136 | |
| 137 {% macro interface_def(interface, client) %} | |
| 138 public interface {{interface|name}} extends {{super_class(client)}} { | |
| 139 {% for constant in interface.constants %} | |
| 140 | |
| 141 {{constant_def(constant)|indent(4)}} | |
| 142 {% endfor %} | |
| 143 {% for enum in interface.enums %} | |
| 144 | |
| 145 {{enum_def(enum, false)|indent(4)}} | |
| 146 {% endfor %} | |
| 147 | |
| 148 public interface Proxy extends {{interface|name}}, {{super_class(client, Fal
se)}}.Proxy{% if client %}<{{client|java_type}}>{% endif %} { | |
| 149 } | |
| 150 | |
| 151 {{manager_class(interface, client)}} MANAGER = {{interface|name}}_Internal.M
ANAGER; | |
| 152 {% for method in interface.methods %} | |
| 153 | |
| 154 void {{method|name}}({{declare_request_params(method)}}); | |
| 155 {% if method.response_parameters != None %} | |
| 156 {{declare_callback(method)|indent(4)}} | |
| 157 {% endif %} | |
| 158 {% endfor %} | |
| 159 } | |
| 160 {% endmacro %} | |
| 161 | |
| 162 {% macro interface_internal_def(interface, client) %} | |
| 163 class {{interface|name}}_Internal { | |
| 164 | |
| 165 {{manager_def(interface, client)|indent(4)}} | |
| 166 | |
| 167 {% for method in interface.methods %} | |
| 168 private static final int {{method|method_ordinal_name}} = {{method.ordinal}}
; | |
| 169 {% endfor %} | |
| 170 | |
| 171 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 { | |
| 172 | |
| 173 Proxy(org.chromium.mojo.system.Core core, | |
| 174 org.chromium.mojo.bindings.MessageReceiverWithResponder messageRec
eiver) { | |
| 175 super(core, messageReceiver); | |
| 176 } | |
| 177 {% for method in interface.methods %} | |
| 178 | |
| 179 @Override | |
| 180 public void {{method|name}}({{declare_request_params(method)}}) { | |
| 181 {% set request_struct = method|struct_from_method %} | |
| 182 {{request_struct|name}} _message = new {{request_struct|name}}(); | |
| 183 {% for param in method.parameters %} | |
| 184 _message.{{param|name}} = {{param|name}}; | |
| 185 {% endfor %} | |
| 186 {% if method.response_parameters != None %} | |
| 187 getMessageReceiver().acceptWithResponder( | |
| 188 _message.serializeWithHeader( | |
| 189 getCore(), | |
| 190 new org.chromium.mojo.bindings.MessageHeader( | |
| 191 {{method|method_ordinal_name}}, | |
| 192 {{flags_for_method(method, True)}}, | |
| 193 0)), | |
| 194 new {{method|response_struct_from_method|name}}ForwardToCall
back(callback)); | |
| 195 {% else %} | |
| 196 getMessageReceiver().accept( | |
| 197 _message.serializeWithHeader( | |
| 198 getCore(), | |
| 199 new org.chromium.mojo.bindings.MessageHeader({{metho
d|method_ordinal_name}}))); | |
| 200 {% endif %} | |
| 201 } | |
| 202 {% endfor %} | |
| 203 | |
| 204 } | |
| 205 | |
| 206 static final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{
interface|name}}> { | |
| 207 | |
| 208 Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) { | |
| 209 super(core, impl); | |
| 210 } | |
| 211 | |
| 212 @Override | |
| 213 public boolean accept(org.chromium.mojo.bindings.Message message) { | |
| 214 {{accept_body(interface, False)|indent(12)}} | |
| 215 } | |
| 216 | |
| 217 @Override | |
| 218 public boolean acceptWithResponder(org.chromium.mojo.bindings.Message me
ssage, org.chromium.mojo.bindings.MessageReceiver receiver) { | |
| 219 {{accept_body(interface, True)|indent(12)}} | |
| 220 } | |
| 221 } | |
| 222 {% for method in interface.methods %} | |
| 223 | |
| 224 {{ struct_def(method|struct_from_method, True)|indent(4) }} | |
| 225 {% if method.response_parameters != None %} | |
| 226 {% set response_struct = method|response_struct_from_method %} | |
| 227 | |
| 228 {{ struct_def(response_struct, True)|indent(4) }} | |
| 229 | |
| 230 static class {{response_struct|name}}ForwardToCallback extends org.chromium.
mojo.bindings.SideEffectFreeCloseable | |
| 231 implements org.chromium.mojo.bindings.MessageReceiver { | |
| 232 private final {{interface|name}}.{{method|interface_response_name}} mCal
lback; | |
| 233 | |
| 234 {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|in
terface_response_name}} callback) { | |
| 235 this.mCallback = callback; | |
| 236 } | |
| 237 | |
| 238 @Override | |
| 239 public boolean accept(org.chromium.mojo.bindings.Message message) { | |
| 240 try { | |
| 241 org.chromium.mojo.bindings.ServiceMessage messageWithHeader = | |
| 242 message.asServiceMessage(); | |
| 243 org.chromium.mojo.bindings.MessageHeader header = messageWithHea
der.getHeader(); | |
| 244 if (!header.validateHeader({{method|method_ordinal_name}}, | |
| 245 {{flags_for_method(method, False)}}))
{ | |
| 246 return false; | |
| 247 } | |
| 248 {% if method.response_parameters|length %} | |
| 249 {{response_struct|name}} response = {{response_struct|name}}.des
erialize(messageWithHeader.getPayload()); | |
| 250 {% endif %} | |
| 251 mCallback.call({{run_callback('response', method.response_parame
ters)}}); | |
| 252 return true; | |
| 253 } catch (org.chromium.mojo.bindings.DeserializationException e) { | |
| 254 return false; | |
| 255 } | |
| 256 } | |
| 257 } | |
| 258 | |
| 259 static class {{response_struct|name}}ProxyToResponder implements {{interface
|name}}.{{method|interface_response_name}} { | |
| 260 | |
| 261 private final org.chromium.mojo.system.Core mCore; | |
| 262 private final org.chromium.mojo.bindings.MessageReceiver mMessageReceive
r; | |
| 263 private final long mRequestId; | |
| 264 | |
| 265 {{response_struct|name}}ProxyToResponder( | |
| 266 org.chromium.mojo.system.Core core, | |
| 267 org.chromium.mojo.bindings.MessageReceiver messageReceiver, | |
| 268 long requestId) { | |
| 269 mCore = core; | |
| 270 mMessageReceiver = messageReceiver; | |
| 271 mRequestId = requestId; | |
| 272 } | |
| 273 | |
| 274 @Override | |
| 275 public void call({{declare_params(method.response_parameters, true)}}) { | |
| 276 {{response_struct|name}} _response = new {{response_struct|name}}(); | |
| 277 {% for param in method.response_parameters %} | |
| 278 _response.{{param|name}} = {{param|name}}; | |
| 279 {% endfor %} | |
| 280 org.chromium.mojo.bindings.ServiceMessage _message = | |
| 281 _response.serializeWithHeader( | |
| 282 mCore, | |
| 283 new org.chromium.mojo.bindings.MessageHeader( | |
| 284 {{method|method_ordinal_name}}, | |
| 285 {{flags_for_method(method, False)}}, | |
| 286 mRequestId)); | |
| 287 mMessageReceiver.accept(_message); | |
| 288 } | |
| 289 } | |
| 290 {% endif %} | |
| 291 {% endfor %} | |
| 292 | |
| 293 } | |
| 294 {% endmacro %} | |
| OLD | NEW |