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

Unified 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: Address further comments. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/tools/bindings/generators/mojom_java_generator.py
diff --git a/mojo/public/tools/bindings/generators/mojom_java_generator.py b/mojo/public/tools/bindings/generators/mojom_java_generator.py
index 8b4fd25e0ce51a31782e485179dcc264ca5ff801..678c3e5ea846e8ccf155d919f054c7b4daaf2e8f 100644
--- a/mojo/public/tools/bindings/generators/mojom_java_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py
@@ -6,8 +6,12 @@
import argparse
import ast
+import contextlib
import os
import re
+import shutil
+import tempfile
+import zipfile
from jinja2 import contextfilter
@@ -350,6 +354,22 @@ def HasMethodWithoutResponse(interface):
return True
return False
+@contextlib.contextmanager
+def TempDir():
+ dirname = tempfile.mkdtemp()
+ try:
+ yield dirname
+ finally:
+ shutil.rmtree(dirname)
+
+def ZipContentInto(root, zip_filename):
+ with zipfile.ZipFile(zip_filename, 'w') as zip_file:
+ for dirname, _, files in os.walk(root):
+ for filename in files:
+ path = os.path.join(dirname, filename)
+ path_in_archive = os.path.relpath(path, root)
+ zip_file.write(path, path_in_archive)
+
class Generator(generator.Generator):
java_filters = {
@@ -417,19 +437,13 @@ class Generator(generator.Generator):
'constants': module.constants})
return exports
- def GenerateFiles(self, unparsed_args):
- parser = argparse.ArgumentParser()
- parser.add_argument('--java_output_directory', dest='java_output_directory')
- args = parser.parse_args(unparsed_args)
- if self.output_dir and args.java_output_directory:
- self.output_dir = os.path.join(args.java_output_directory,
- GetPackage(self.module).replace('.', '/'))
- if not os.path.exists(self.output_dir):
- try:
- os.makedirs(self.output_dir)
- except:
- # Ignore errors on directory creation.
- pass
+ def DoGenerateFiles(self):
+ if not os.path.exists(self.output_dir):
+ try:
+ os.makedirs(self.output_dir)
+ except:
+ # Ignore errors on directory creation.
+ pass
# Keep this above the others as .GetStructs() changes the state of the
# module, annotating structs with required information.
@@ -451,6 +465,26 @@ class Generator(generator.Generator):
self.Write(self.GenerateConstantsSource(self.module),
'%s.java' % GetConstantsMainEntityName(self.module))
+ def GenerateFiles(self, unparsed_args):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--java_output_directory', dest='java_output_directory')
+ args = parser.parse_args(unparsed_args)
+ package_path = GetPackage(self.module).replace('.', '/')
+
+ # Generate the java files in a temporary directory and place a single
+ # srcjar in the output directory.
+ zip_filename = os.path.join(self.output_dir,
+ "%s.srcjar" % self.module.name)
+ with TempDir() as temp_java_root:
+ self.output_dir = os.path.join(temp_java_root, package_path)
+ self.DoGenerateFiles();
+ ZipContentInto(temp_java_root, zip_filename)
+
+ if args.java_output_directory:
+ # If requested, generate the java files directly into indicated directory.
+ self.output_dir = os.path.join(args.java_output_directory, package_path)
+ self.DoGenerateFiles();
+
def GetJinjaParameters(self):
return {
'lstrip_blocks': True,
« 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