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

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

Issue 511543005: Revert of mojo: generate Proxies and Stubs for java bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 # 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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if mojom.IsInterfaceRequestKind(kind): 146 if mojom.IsInterfaceRequestKind(kind):
147 return "readInterfaceRequest" 147 return "readInterfaceRequest"
148 if mojom.IsInterfaceKind(kind): 148 if mojom.IsInterfaceKind(kind):
149 return "readServiceInterface" 149 return "readServiceInterface"
150 return _spec_to_decode_method[kind.spec] 150 return _spec_to_decode_method[kind.spec]
151 methodName = _DecodeMethodName(kind) 151 methodName = _DecodeMethodName(kind)
152 additionalParams = '' 152 additionalParams = ''
153 if (kind == mojom.BOOL): 153 if (kind == mojom.BOOL):
154 additionalParams = ', %d' % bit 154 additionalParams = ', %d' % bit
155 if mojom.IsInterfaceKind(kind): 155 if mojom.IsInterfaceKind(kind):
156 additionalParams = ', %s.MANAGER' % GetJavaType(context, kind) 156 additionalParams = ', %s.BUILDER' % GetJavaType(context, kind)
157 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind): 157 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
158 additionalParams = ', %s.MANAGER' % GetJavaType(context, kind.kind) 158 additionalParams = ', %s.BUILDER' % GetJavaType(context, kind.kind)
159 return '%s(%s%s)' % (methodName, offset, additionalParams) 159 return '%s(%s%s)' % (methodName, offset, additionalParams)
160 160
161 @contextfilter 161 @contextfilter
162 def EncodeMethod(context, kind, variable, offset, bit): 162 def EncodeMethod(context, kind, variable, offset, bit):
163 additionalParams = '' 163 additionalParams = ''
164 if (kind == mojom.BOOL): 164 if (kind == mojom.BOOL):
165 additionalParams = ', %d' % bit 165 additionalParams = ', %d' % bit
166 if mojom.IsInterfaceKind(kind): 166 if mojom.IsInterfaceKind(kind):
167 additionalParams = ', %s.MANAGER' % GetJavaType(context, kind) 167 additionalParams = ', %s.BUILDER' % GetJavaType(context, kind)
168 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind): 168 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
169 additionalParams = ', %s.MANAGER' % GetJavaType(context, kind.kind) 169 additionalParams = ', %s.BUILDER' % GetJavaType(context, kind.kind)
170 return 'encode(%s, %s%s)' % (variable, offset, additionalParams) 170 return 'encode(%s, %s%s)' % (variable, offset, additionalParams)
171 171
172 def GetPackage(module): 172 def GetPackage(module):
173 if 'JavaPackage' in module.attributes: 173 if 'JavaPackage' in module.attributes:
174 return ParseStringAttribute(module.attributes['JavaPackage']) 174 return ParseStringAttribute(module.attributes['JavaPackage'])
175 # Default package. 175 # Default package.
176 return "org.chromium.mojom." + module.namespace 176 return "org.chromium.mojom." + module.namespace
177 177
178 def GetNameForKind(context, kind): 178 def GetNameForKind(context, kind):
179 def _GetNameHierachy(kind): 179 def _GetNameHierachy(kind):
(...skipping 81 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
279 def GetConstantsMainEntityName(module): 271 def GetConstantsMainEntityName(module):
280 if 'JavaConstantsClassName' in module.attributes: 272 if 'JavaConstantsClassName' in module.attributes:
281 return ParseStringAttribute(module.attributes['JavaConstantsClassName']) 273 return ParseStringAttribute(module.attributes['JavaConstantsClassName'])
282 # This constructs the name of the embedding classes for module level constants 274 # This constructs the name of the embedding classes for module level constants
283 # by extracting the mojom's filename and prepending it to Constants. 275 # by extracting the mojom's filename and prepending it to Constants.
284 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) + 276 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) +
285 'Constants') 277 'Constants')
286 278
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
302 class Generator(generator.Generator): 279 class Generator(generator.Generator):
303 280
304 java_filters = { 281 java_filters = {
305 "interface_response_name": GetInterfaceResponseName, 282 "interface_response_name": GetInterfaceResponseName,
306 "constant_value": ConstantValue, 283 "constant_value": ConstantValue,
307 "default_value": DefaultValue, 284 "default_value": DefaultValue,
308 "decode_method": DecodeMethod, 285 "decode_method": DecodeMethod,
309 "expression_to_text": ExpressionToText, 286 "expression_to_text": ExpressionToText,
310 "encode_method": EncodeMethod, 287 "encode_method": EncodeMethod,
311 "has_method_with_response": HasMethodWithResponse,
312 "has_method_without_response": HasMethodWithoutResponse,
313 "is_handle": mojom.IsNonInterfaceHandleKind, 288 "is_handle": mojom.IsNonInterfaceHandleKind,
314 "is_pointer_array_kind": IsPointerArrayKind, 289 "is_pointer_array_kind": IsPointerArrayKind,
315 "is_struct_kind": mojom.IsStructKind, 290 "is_struct_kind": mojom.IsStructKind,
316 "java_type": GetJavaType, 291 "java_type": GetJavaType,
317 "method_ordinal_name": GetMethodOrdinalName,
318 "name": GetNameForElement, 292 "name": GetNameForElement,
319 "new_array": NewArray, 293 "new_array": NewArray,
320 "response_struct_from_method": GetResponseStructFromMethod,
321 "struct_from_method": GetStructFromMethod,
322 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, 294 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
323 } 295 }
324 296
325 def GetJinjaExports(self): 297 def GetJinjaExports(self):
326 return { 298 return {
327 "module": self.module, 299 "module": self.module,
328 "package": GetPackage(self.module), 300 "package": GetPackage(self.module),
329 } 301 }
330 302
331 def GetJinjaExportsForInterface(self, interface): 303 @UseJinja("java_templates/enum.java.tmpl", filters=java_filters)
304 def GenerateEnumSource(self, enum):
305 exports = self.GetJinjaExports()
306 exports.update({"enum": enum})
307 return exports
308
309 @UseJinja("java_templates/struct.java.tmpl", filters=java_filters)
310 def GenerateStructSource(self, struct):
311 exports = self.GetJinjaExports()
312 exports.update({"struct": struct})
313 return exports
314
315 @UseJinja("java_templates/interface.java.tmpl", filters=java_filters)
316 def GenerateInterfaceSource(self, interface):
332 exports = self.GetJinjaExports() 317 exports = self.GetJinjaExports()
333 exports.update({"interface": interface}) 318 exports.update({"interface": interface})
334 if interface.client: 319 if interface.client:
335 for client in self.module.interfaces: 320 for client in self.module.interfaces:
336 if client.name == interface.client: 321 if client.name == interface.client:
337 exports.update({"client": client}) 322 exports.update({"client": client})
338 return exports 323 return exports
339 324
340 @UseJinja("java_templates/enum.java.tmpl", filters=java_filters)
341 def GenerateEnumSource(self, enum):
342 exports = self.GetJinjaExports()
343 exports.update({"enum": enum})
344 return exports
345
346 @UseJinja("java_templates/struct.java.tmpl", filters=java_filters)
347 def GenerateStructSource(self, struct):
348 exports = self.GetJinjaExports()
349 exports.update({"struct": struct})
350 return exports
351
352 @UseJinja("java_templates/interface.java.tmpl", filters=java_filters)
353 def GenerateInterfaceSource(self, interface):
354 return self.GetJinjaExportsForInterface(interface)
355
356 @UseJinja("java_templates/interface_internal.java.tmpl", filters=java_filters)
357 def GenerateInterfaceInternalSource(self, interface):
358 return self.GetJinjaExportsForInterface(interface)
359
360 @UseJinja("java_templates/constants.java.tmpl", filters=java_filters) 325 @UseJinja("java_templates/constants.java.tmpl", filters=java_filters)
361 def GenerateConstantsSource(self, module): 326 def GenerateConstantsSource(self, module):
362 exports = self.GetJinjaExports() 327 exports = self.GetJinjaExports()
363 exports.update({"main_entity": GetConstantsMainEntityName(module), 328 exports.update({"main_entity": GetConstantsMainEntityName(module),
364 "constants": module.constants}) 329 "constants": module.constants})
365 return exports 330 return exports
366 331
367 def GenerateFiles(self, unparsed_args): 332 def GenerateFiles(self, unparsed_args):
368 parser = argparse.ArgumentParser() 333 parser = argparse.ArgumentParser()
369 parser.add_argument("--java_output_directory", dest="java_output_directory") 334 parser.add_argument("--java_output_directory", dest="java_output_directory")
(...skipping 12 matching lines...) Expand all
382 self.Write(self.GenerateEnumSource(enum), 347 self.Write(self.GenerateEnumSource(enum),
383 "%s.java" % GetNameForElement(enum)) 348 "%s.java" % GetNameForElement(enum))
384 349
385 for struct in self.module.structs: 350 for struct in self.module.structs:
386 self.Write(self.GenerateStructSource(struct), 351 self.Write(self.GenerateStructSource(struct),
387 "%s.java" % GetNameForElement(struct)) 352 "%s.java" % GetNameForElement(struct))
388 353
389 for interface in self.module.interfaces: 354 for interface in self.module.interfaces:
390 self.Write(self.GenerateInterfaceSource(interface), 355 self.Write(self.GenerateInterfaceSource(interface),
391 "%s.java" % GetNameForElement(interface)) 356 "%s.java" % GetNameForElement(interface))
392 self.Write(self.GenerateInterfaceInternalSource(interface),
393 "%s_Internal.java" % GetNameForElement(interface))
394 357
395 if self.module.constants: 358 if self.module.constants:
396 self.Write(self.GenerateConstantsSource(self.module), 359 self.Write(self.GenerateConstantsSource(self.module),
397 "%s.java" % GetConstantsMainEntityName(self.module)) 360 "%s.java" % GetConstantsMainEntityName(self.module))
398 361
399 def GetJinjaParameters(self): 362 def GetJinjaParameters(self):
400 return { 363 return {
401 'lstrip_blocks': True, 364 'lstrip_blocks': True,
402 'trim_blocks': True, 365 'trim_blocks': True,
403 } 366 }
404 367
405 def GetGlobals(self): 368 def GetGlobals(self):
406 return { 369 return {
407 'module': self.module, 370 'module': self.module,
408 } 371 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698