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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_java_generator.py

Issue 411913002: mojo: generate Proxies and Stubs for java bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow first pass review. Created 6 years, 4 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 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Generates java source files from a mojom.Module.""" 5 """Generates java source files from a mojom.Module."""
6 6
7 import argparse 7 import argparse
8 import ast 8 import ast
9 import os 9 import os
10 import re 10 import re
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 return _java_primitive_to_boxed_type[unboxed_type] 196 return _java_primitive_to_boxed_type[unboxed_type]
197 return unboxed_type 197 return unboxed_type
198 198
199 @contextfilter 199 @contextfilter
200 def GetJavaType(context, kind, boxed=False): 200 def GetJavaType(context, kind, boxed=False):
201 if boxed: 201 if boxed:
202 return GetBoxedJavaType(context, kind) 202 return GetBoxedJavaType(context, kind)
203 if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind): 203 if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind):
204 return GetNameForKind(context, kind) 204 return GetNameForKind(context, kind)
205 if mojom.IsInterfaceRequestKind(kind): 205 if mojom.IsInterfaceRequestKind(kind):
206 return ("org.chromium.mojo.bindings.InterfaceRequest<%s>" % 206 return ("org.chromium.mojo.bindings.InterfaceRequest<%s.Proxy>" %
207 GetNameForKind(context, kind.kind)) 207 GetNameForKind(context, kind.kind))
208 if mojom.IsAnyArrayKind(kind): 208 if mojom.IsAnyArrayKind(kind):
209 return "%s[]" % GetJavaType(context, kind.kind) 209 return "%s[]" % GetJavaType(context, kind.kind)
210 if mojom.IsEnumKind(kind): 210 if mojom.IsEnumKind(kind):
211 return "int" 211 return "int"
212 return _spec_to_java_type[kind.spec] 212 return _spec_to_java_type[kind.spec]
213 213
214 @contextfilter 214 @contextfilter
215 def DefaultValue(context, field): 215 def DefaultValue(context, field):
216 assert field.default 216 assert field.default
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 number -= 2 ** 64 261 number -= 2 ** 64
262 return '%dL' % number 262 return '%dL' % number
263 return token 263 return token
264 264
265 def IsPointerArrayKind(kind): 265 def IsPointerArrayKind(kind):
266 if not mojom.IsAnyArrayKind(kind): 266 if not mojom.IsAnyArrayKind(kind):
267 return False 267 return False
268 sub_kind = kind.kind 268 sub_kind = kind.kind
269 return mojom.IsObjectKind(sub_kind) 269 return mojom.IsObjectKind(sub_kind)
270 270
271 def GetResponseStructFromMethod(method):
272 return generator.GetDataHeader(
273 False, generator.GetResponseStructFromMethod(method))
274
275 def GetStructFromMethod(method):
276 return generator.GetDataHeader(
277 False, generator.GetStructFromMethod(method))
278
271 def GetConstantsMainEntityName(module): 279 def GetConstantsMainEntityName(module):
272 if 'JavaConstantsClassName' in module.attributes: 280 if 'JavaConstantsClassName' in module.attributes:
273 return ParseStringAttribute(module.attributes['JavaConstantsClassName']) 281 return ParseStringAttribute(module.attributes['JavaConstantsClassName'])
274 # This constructs the name of the embedding classes for module level constants 282 # This constructs the name of the embedding classes for module level constants
275 # by extracting the mojom's filename and prepending it to Constants. 283 # by extracting the mojom's filename and prepending it to Constants.
276 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) + 284 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) +
277 'Constants') 285 'Constants')
278 286
287 def GetMethodOrdinalName(method):
288 return ConstantStyle(method.name) + "_ORDINAL"
289
290 def HasMethodWithResponse(interface):
291 for method in interface.methods:
292 if method.response_parameters:
293 return True
294 return False
295
296 def HasMethodWithoutResponse(interface):
297 for method in interface.methods:
298 if not method.response_parameters:
299 return True
300 return False
301
279 class Generator(generator.Generator): 302 class Generator(generator.Generator):
280 303
281 java_filters = { 304 java_filters = {
282 "interface_response_name": GetInterfaceResponseName, 305 "interface_response_name": GetInterfaceResponseName,
283 "constant_value": ConstantValue, 306 "constant_value": ConstantValue,
284 "default_value": DefaultValue, 307 "default_value": DefaultValue,
285 "decode_method": DecodeMethod, 308 "decode_method": DecodeMethod,
286 "expression_to_text": ExpressionToText, 309 "expression_to_text": ExpressionToText,
287 "encode_method": EncodeMethod, 310 "encode_method": EncodeMethod,
311 "has_method_with_response": HasMethodWithResponse,
312 "has_method_without_response": HasMethodWithoutResponse,
288 "is_handle": mojom.IsNonInterfaceHandleKind, 313 "is_handle": mojom.IsNonInterfaceHandleKind,
289 "is_pointer_array_kind": IsPointerArrayKind, 314 "is_pointer_array_kind": IsPointerArrayKind,
290 "is_struct_kind": mojom.IsStructKind, 315 "is_struct_kind": mojom.IsStructKind,
291 "java_type": GetJavaType, 316 "java_type": GetJavaType,
317 "method_ordinal_name": GetMethodOrdinalName,
292 "name": GetNameForElement, 318 "name": GetNameForElement,
293 "new_array": NewArray, 319 "new_array": NewArray,
320 "response_struct_from_method": GetResponseStructFromMethod,
321 "struct_from_method": GetStructFromMethod,
294 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, 322 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
295 } 323 }
296 324
297 def GetJinjaExports(self): 325 def GetJinjaExports(self):
298 return { 326 return {
299 "module": self.module, 327 "module": self.module,
300 "package": GetPackage(self.module), 328 "package": GetPackage(self.module),
301 } 329 }
302 330
331 def GetJinjaExportsForInterface(self, interface):
332 exports = self.GetJinjaExports()
333 exports.update({"interface": interface})
334 if interface.client:
335 for client in self.module.interfaces:
336 if client.name == interface.client:
337 exports.update({"client": client})
338 return exports
339
303 @UseJinja("java_templates/enum.java.tmpl", filters=java_filters) 340 @UseJinja("java_templates/enum.java.tmpl", filters=java_filters)
304 def GenerateEnumSource(self, enum): 341 def GenerateEnumSource(self, enum):
305 exports = self.GetJinjaExports() 342 exports = self.GetJinjaExports()
306 exports.update({"enum": enum}) 343 exports.update({"enum": enum})
307 return exports 344 return exports
308 345
309 @UseJinja("java_templates/struct.java.tmpl", filters=java_filters) 346 @UseJinja("java_templates/struct.java.tmpl", filters=java_filters)
310 def GenerateStructSource(self, struct): 347 def GenerateStructSource(self, struct):
311 exports = self.GetJinjaExports() 348 exports = self.GetJinjaExports()
312 exports.update({"struct": struct}) 349 exports.update({"struct": struct})
313 return exports 350 return exports
314 351
315 @UseJinja("java_templates/interface.java.tmpl", filters=java_filters) 352 @UseJinja("java_templates/interface.java.tmpl", filters=java_filters)
316 def GenerateInterfaceSource(self, interface): 353 def GenerateInterfaceSource(self, interface):
317 exports = self.GetJinjaExports() 354 return self.GetJinjaExportsForInterface(interface)
318 exports.update({"interface": interface}) 355
319 if interface.client: 356 @UseJinja("java_templates/interface_internal.java.tmpl", filters=java_filters)
320 for client in self.module.interfaces: 357 def GenerateInterfaceInternalSource(self, interface):
321 if client.name == interface.client: 358 return self.GetJinjaExportsForInterface(interface)
322 exports.update({"client": client})
323 return exports
324 359
325 @UseJinja("java_templates/constants.java.tmpl", filters=java_filters) 360 @UseJinja("java_templates/constants.java.tmpl", filters=java_filters)
326 def GenerateConstantsSource(self, module): 361 def GenerateConstantsSource(self, module):
327 exports = self.GetJinjaExports() 362 exports = self.GetJinjaExports()
328 exports.update({"main_entity": GetConstantsMainEntityName(module), 363 exports.update({"main_entity": GetConstantsMainEntityName(module),
329 "constants": module.constants}) 364 "constants": module.constants})
330 return exports 365 return exports
331 366
332 def GenerateFiles(self, unparsed_args): 367 def GenerateFiles(self, unparsed_args):
333 parser = argparse.ArgumentParser() 368 parser = argparse.ArgumentParser()
(...skipping 13 matching lines...) Expand all
347 self.Write(self.GenerateEnumSource(enum), 382 self.Write(self.GenerateEnumSource(enum),
348 "%s.java" % GetNameForElement(enum)) 383 "%s.java" % GetNameForElement(enum))
349 384
350 for struct in self.module.structs: 385 for struct in self.module.structs:
351 self.Write(self.GenerateStructSource(struct), 386 self.Write(self.GenerateStructSource(struct),
352 "%s.java" % GetNameForElement(struct)) 387 "%s.java" % GetNameForElement(struct))
353 388
354 for interface in self.module.interfaces: 389 for interface in self.module.interfaces:
355 self.Write(self.GenerateInterfaceSource(interface), 390 self.Write(self.GenerateInterfaceSource(interface),
356 "%s.java" % GetNameForElement(interface)) 391 "%s.java" % GetNameForElement(interface))
392 self.Write(self.GenerateInterfaceInternalSource(interface),
393 "%sInternal.java" % GetNameForElement(interface))
357 394
358 if self.module.constants: 395 if self.module.constants:
359 self.Write(self.GenerateConstantsSource(self.module), 396 self.Write(self.GenerateConstantsSource(self.module),
360 "%s.java" % GetConstantsMainEntityName(self.module)) 397 "%s.java" % GetConstantsMainEntityName(self.module))
361 398
362 def GetJinjaParameters(self): 399 def GetJinjaParameters(self):
363 return { 400 return {
364 'lstrip_blocks': True, 401 'lstrip_blocks': True,
365 'trim_blocks': True, 402 'trim_blocks': True,
366 } 403 }
367 404
368 def GetGlobals(self): 405 def GetGlobals(self):
369 return { 406 return {
370 'module': self.module, 407 'module': self.module,
371 } 408 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698