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

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

Issue 605653003: Generate a single srcjar as output in of the Java mojom generator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make srcjar the default output. Created 6 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 contextlib
9 import os 10 import os
10 import re 11 import re
11 12
12 from jinja2 import contextfilter 13 from jinja2 import contextfilter
13 14
14 import mojom.generate.generator as generator 15 import mojom.generate.generator as generator
15 import mojom.generate.module as mojom 16 import mojom.generate.module as mojom
16 from mojom.generate.template_expander import UseJinja 17 from mojom.generate.template_expander import UseJinja
17 18
18 19
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 if method.response_parameters: 344 if method.response_parameters:
344 return True 345 return True
345 return False 346 return False
346 347
347 def HasMethodWithoutResponse(interface): 348 def HasMethodWithoutResponse(interface):
348 for method in interface.methods: 349 for method in interface.methods:
349 if not method.response_parameters: 350 if not method.response_parameters:
350 return True 351 return True
351 return False 352 return False
352 353
354 @contextlib.contextmanager
355 def TempDir():
356 import tempfile
357 import shutil
qsr 2014/09/26 15:57:12 import should not be local.
ppi 2014/09/26 16:12:16 Done.
358 dirname = tempfile.mkdtemp()
359 try:
360 yield dirname
361 finally:
362 shutil.rmtree(dirname)
363
364 def ZipContentInto(directory, root, zip_filename):
qsr 2014/09/26 15:57:12 You can only pass root here, and do a traversal fr
ppi 2014/09/26 16:12:16 Done.
ppi 2014/09/26 16:12:16 Done.
365 import zipfile
qsr 2014/09/26 15:57:12 Same
ppi 2014/09/26 16:12:16 Done.
366 with zipfile.ZipFile(zip_filename, 'w') as zip_file:
367 for dirname, subdirs, files in os.walk(directory):
qsr 2014/09/26 15:57:12 If you do not use a variable, use _.
ppi 2014/09/26 16:12:16 Done.
368 for filename in files:
369 path = os.path.join(dirname, filename)
370 arcname = os.path.relpath(path, root)
qsr 2014/09/26 15:57:12 What does arcname mean? something more descriptive
ppi 2014/09/26 16:12:16 Done.
371 zip_file.write(path, arcname)
372
353 class Generator(generator.Generator): 373 class Generator(generator.Generator):
354 374
355 java_filters = { 375 java_filters = {
356 'interface_response_name': GetInterfaceResponseName, 376 'interface_response_name': GetInterfaceResponseName,
357 'constant_value': ConstantValue, 377 'constant_value': ConstantValue,
358 'default_value': DefaultValue, 378 'default_value': DefaultValue,
359 'decode_method': DecodeMethod, 379 'decode_method': DecodeMethod,
360 'expression_to_text': ExpressionToText, 380 'expression_to_text': ExpressionToText,
361 'encode_method': EncodeMethod, 381 'encode_method': EncodeMethod,
362 'has_method_with_response': HasMethodWithResponse, 382 'has_method_with_response': HasMethodWithResponse,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 def GenerateInterfaceInternalSource(self, interface): 430 def GenerateInterfaceInternalSource(self, interface):
411 return self.GetJinjaExportsForInterface(interface) 431 return self.GetJinjaExportsForInterface(interface)
412 432
413 @UseJinja('java_templates/constants.java.tmpl', filters=java_filters) 433 @UseJinja('java_templates/constants.java.tmpl', filters=java_filters)
414 def GenerateConstantsSource(self, module): 434 def GenerateConstantsSource(self, module):
415 exports = self.GetJinjaExports() 435 exports = self.GetJinjaExports()
416 exports.update({'main_entity': GetConstantsMainEntityName(module), 436 exports.update({'main_entity': GetConstantsMainEntityName(module),
417 'constants': module.constants}) 437 'constants': module.constants})
418 return exports 438 return exports
419 439
420 def GenerateFiles(self, unparsed_args): 440 def DoGenerateFiles(self):
421 parser = argparse.ArgumentParser() 441 if not os.path.exists(self.output_dir):
422 parser.add_argument('--java_output_directory', dest='java_output_directory') 442 try:
423 args = parser.parse_args(unparsed_args) 443 os.makedirs(self.output_dir)
424 if self.output_dir and args.java_output_directory: 444 except:
425 self.output_dir = os.path.join(args.java_output_directory, 445 # Ignore errors on directory creation.
426 GetPackage(self.module).replace('.', '/')) 446 pass
427 if not os.path.exists(self.output_dir):
428 try:
429 os.makedirs(self.output_dir)
430 except:
431 # Ignore errors on directory creation.
432 pass
433 447
434 # Keep this above the others as .GetStructs() changes the state of the 448 # Keep this above the others as .GetStructs() changes the state of the
435 # module, annotating structs with required information. 449 # module, annotating structs with required information.
436 for struct in self.GetStructs(): 450 for struct in self.GetStructs():
437 self.Write(self.GenerateStructSource(struct), 451 self.Write(self.GenerateStructSource(struct),
438 '%s.java' % GetNameForElement(struct)) 452 '%s.java' % GetNameForElement(struct))
439 453
440 for enum in self.module.enums: 454 for enum in self.module.enums:
441 self.Write(self.GenerateEnumSource(enum), 455 self.Write(self.GenerateEnumSource(enum),
442 '%s.java' % GetNameForElement(enum)) 456 '%s.java' % GetNameForElement(enum))
443 457
444 for interface in self.module.interfaces: 458 for interface in self.module.interfaces:
445 self.Write(self.GenerateInterfaceSource(interface), 459 self.Write(self.GenerateInterfaceSource(interface),
446 '%s.java' % GetNameForElement(interface)) 460 '%s.java' % GetNameForElement(interface))
447 self.Write(self.GenerateInterfaceInternalSource(interface), 461 self.Write(self.GenerateInterfaceInternalSource(interface),
448 '%s_Internal.java' % GetNameForElement(interface)) 462 '%s_Internal.java' % GetNameForElement(interface))
449 463
450 if self.module.constants: 464 if self.module.constants:
451 self.Write(self.GenerateConstantsSource(self.module), 465 self.Write(self.GenerateConstantsSource(self.module),
452 '%s.java' % GetConstantsMainEntityName(self.module)) 466 '%s.java' % GetConstantsMainEntityName(self.module))
453 467
468 def GenerateFiles(self, unparsed_args):
469 parser = argparse.ArgumentParser()
470 parser.add_argument('--java_output_directory', dest='java_output_directory')
471 args = parser.parse_args(unparsed_args)
472 package_path = GetPackage(self.module).replace('.', '/')
473
474 if args.java_output_directory:
475 # If requested, generate the java files directly into indicated directory.
476 self.output_dir = os.path.join(args.java_output_directory, package_path)
477 self.DoGenerateFiles();
478 else:
qsr 2014/09/26 15:57:12 You should always generate the srcjar, this is the
ppi 2014/09/26 16:12:17 Done.
479 # Otherwise, generate the java files in a temporary directory and place a
480 # single srcjar in the output directory.
481 zip_filename = os.path.join(self.output_dir,
482 "%s.srcjar" % self.module.name)
483 with TempDir() as temp_java_root:
484 self.output_dir = os.path.join(temp_java_root, package_path)
485 self.DoGenerateFiles();
486 ZipContentInto(self.output_dir, temp_java_root, zip_filename)
487
454 def GetJinjaParameters(self): 488 def GetJinjaParameters(self):
455 return { 489 return {
456 'lstrip_blocks': True, 490 'lstrip_blocks': True,
457 'trim_blocks': True, 491 'trim_blocks': True,
458 } 492 }
459 493
460 def GetGlobals(self): 494 def GetGlobals(self):
461 return { 495 return {
462 'namespace': self.module.namespace, 496 'namespace': self.module.namespace,
463 'module': self.module, 497 'module': self.module,
464 } 498 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698