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)) |