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

Unified Diff: mojo/public/tools/bindings/generators/mojom_java_generator.py

Issue 306893010: Generate java bindings for structs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow review Created 6 years, 6 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
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 7d9110f0d5a4a818f40f1dd13545dad1c9e5c95f..384841cd297e6bbcc35f1bbfa8c91d73a3d94733 100644
--- a/mojo/public/tools/bindings/generators/mojom_java_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py
@@ -10,6 +10,7 @@ import re
import mojom.generate.generator as generator
import mojom.generate.module as mojom
+import mojom.generate.pack as pack
rmcilroy 2014/06/05 11:01:17 nit - remove unneeded import.
qsr 2014/06/05 11:46:11 Done.
from mojom.generate.template_expander import UseJinja
@@ -62,19 +63,21 @@ def ConstantStyle(name):
return '_'.join([x.upper() for x in components])
def GetNameForElement(element):
- if (isinstance(element, mojom.Enum) or
- isinstance(element, mojom.Interface) or
- isinstance(element, mojom.Struct)):
+ if isinstance(element, (mojom.Enum,
+ mojom.Interface,
+ mojom.Struct)):
return UpperCamelCase(element.name)
- if (isinstance(element, mojom.Method) or
- isinstance(element, mojom.Parameter) or
- isinstance(element, mojom.Field)):
+ if isinstance(element, mojom.InterfaceRequest):
+ return GetNameForElement(element.kind)
+ if isinstance(element, (mojom.Method,
+ mojom.Parameter,
+ mojom.Field)):
return CamelCase(element.name)
if isinstance(element, mojom.EnumValue):
return (UpperCamelCase(element.enum_name) + '.' +
ConstantStyle(element.name))
- if (isinstance(element, mojom.NamedValue) or
- isinstance(element, mojom.Constant)):
+ if isinstance(element, (mojom.NamedValue,
+ mojom.Constant)):
return ConstantStyle(element.name)
raise Exception("Unexpected element: " % element)
@@ -91,12 +94,15 @@ def GetPackage(module):
# Default package.
return "org.chromium.mojom." + module.namespace
+def GetSuperClass(method):
+ return "org.chromium.mojo.bindings.Struct"
+
def GetNameForKind(kind):
def _GetNameHierachy(kind):
hierachy = []
if kind.parent_kind:
hierachy = _GetNameHierachy(kind.parent_kind)
- hierachy.append(kind.name)
+ hierachy.append(GetNameForElement(kind))
return hierachy
elements = [GetPackage(kind.module)]
@@ -106,12 +112,17 @@ def GetNameForKind(kind):
def GetJavaType(kind):
if isinstance(kind, (mojom.Struct, mojom.Interface)):
return GetNameForKind(kind)
+ if isinstance(kind, mojom.InterfaceRequest):
+ return GetNameForKind(kind.kind)
if isinstance(kind, mojom.Array):
return "%s[]" % GetJavaType(kind.kind)
if isinstance(kind, mojom.Enum):
return "int"
return _spec_to_java_type[kind.spec]
+def IsHandle(kind):
+ return kind.spec[0] == 'h'
+
def TranslateConstants(token, module):
def _TranslateNamedValue(named_value):
entity_name = GetNameForElement(named_value)
@@ -148,8 +159,10 @@ class Generator(generator.Generator):
java_filters = {
"expression_to_text": ExpressionToText,
+ "is_handle": IsHandle,
"java_type": GetJavaType,
"name": GetNameForElement,
+ "super_class": GetSuperClass,
"verify_token_type": generator.VerifyTokenType,
}
@@ -159,6 +172,20 @@ class Generator(generator.Generator):
"package": GetPackage(self.module),
}
+ @UseJinja("java_templates/enum.java.tmpl", filters=java_filters,
+ lstrip_blocks=True, trim_blocks=True)
+ def GenerateEnumSource(self, enum):
+ exports = self.GetJinjaExports()
+ exports.update({"enum": enum})
+ return exports
+
+ @UseJinja("java_templates/struct.java.tmpl", filters=java_filters,
+ lstrip_blocks=True, trim_blocks=True)
+ def GenerateStructSource(self, struct):
+ exports = self.GetJinjaExports()
+ exports.update({"struct": struct})
+ return exports
+
@UseJinja("java_templates/constants.java.tmpl", filters=java_filters,
lstrip_blocks=True, trim_blocks=True)
def GenerateConstantsSource(self, module):
@@ -181,6 +208,14 @@ class Generator(generator.Generator):
# Ignore errors on directory creation.
pass
+ for enum in self.module.enums:
+ self.Write(self.GenerateEnumSource(enum),
+ "%s.java" % GetNameForElement(enum))
+
+ for struct in self.module.structs:
+ self.Write(self.GenerateStructSource(struct),
+ "%s.java" % GetNameForElement(struct))
+
if self.module.constants:
self.Write(self.GenerateConstantsSource(self.module),
"%s.java" % GetConstantsMainEntityName(self.module))

Powered by Google App Engine
This is Rietveld 408576698