Commit f554fc25 authored by yzshen's avatar yzshen Committed by Commit bot

Mojo code generator: makes the filters member methods of generator if necessary.

So that we don't need to use global variables.

BUG=718614

Review-Url: https://codereview.chromium.org/2864543002
Cr-Commit-Position: refs/heads/master@{#469530}
parent 99842054
......@@ -403,39 +403,7 @@ def TempDir():
shutil.rmtree(dirname)
class Generator(generator.Generator):
java_filters = {
'array_expected_length': GetArrayExpectedLength,
'array': GetArrayKind,
'constant_value': ConstantValue,
'decode_method': DecodeMethod,
'default_value': DefaultValue,
'encode_method': EncodeMethod,
'expression_to_text': ExpressionToText,
'has_method_without_response': HasMethodWithoutResponse,
'has_method_with_response': HasMethodWithResponse,
'interface_response_name': GetInterfaceResponseName,
'is_array_kind': mojom.IsArrayKind,
'is_any_handle_kind': mojom.IsAnyHandleKind,
"is_enum_kind": mojom.IsEnumKind,
'is_interface_request_kind': mojom.IsInterfaceRequestKind,
'is_map_kind': mojom.IsMapKind,
'is_nullable_kind': mojom.IsNullableKind,
'is_pointer_array_kind': IsPointerArrayKind,
'is_reference_kind': mojom.IsReferenceKind,
'is_struct_kind': mojom.IsStructKind,
'is_union_array_kind': IsUnionArrayKind,
'is_union_kind': mojom.IsUnionKind,
'java_class_for_enum': GetJavaClassForEnum,
'java_true_false': GetJavaTrueFalse,
'java_type': GetJavaType,
'method_ordinal_name': GetMethodOrdinalName,
'name': GetNameForElement,
'new_array': NewArray,
'ucc': lambda x: UpperCamelCase(x.name),
}
def GetJinjaExports(self):
def _GetJinjaExports(self):
return {
'package': GetPackage(self.module),
}
......@@ -444,73 +412,102 @@ class Generator(generator.Generator):
def GetTemplatePrefix():
return "java_templates"
@classmethod
def GetFilters(cls):
return cls.java_filters
def GetFilters(self):
java_filters = {
'array_expected_length': GetArrayExpectedLength,
'array': GetArrayKind,
'constant_value': ConstantValue,
'decode_method': DecodeMethod,
'default_value': DefaultValue,
'encode_method': EncodeMethod,
'expression_to_text': ExpressionToText,
'has_method_without_response': HasMethodWithoutResponse,
'has_method_with_response': HasMethodWithResponse,
'interface_response_name': GetInterfaceResponseName,
'is_array_kind': mojom.IsArrayKind,
'is_any_handle_kind': mojom.IsAnyHandleKind,
"is_enum_kind": mojom.IsEnumKind,
'is_interface_request_kind': mojom.IsInterfaceRequestKind,
'is_map_kind': mojom.IsMapKind,
'is_nullable_kind': mojom.IsNullableKind,
'is_pointer_array_kind': IsPointerArrayKind,
'is_reference_kind': mojom.IsReferenceKind,
'is_struct_kind': mojom.IsStructKind,
'is_union_array_kind': IsUnionArrayKind,
'is_union_kind': mojom.IsUnionKind,
'java_class_for_enum': GetJavaClassForEnum,
'java_true_false': GetJavaTrueFalse,
'java_type': GetJavaType,
'method_ordinal_name': GetMethodOrdinalName,
'name': GetNameForElement,
'new_array': NewArray,
'ucc': lambda x: UpperCamelCase(x.name),
}
return java_filters
def GetJinjaExportsForInterface(self, interface):
exports = self.GetJinjaExports()
def _GetJinjaExportsForInterface(self, interface):
exports = self._GetJinjaExports()
exports.update({'interface': interface})
return exports
@UseJinja('enum.java.tmpl')
def GenerateEnumSource(self, enum):
exports = self.GetJinjaExports()
def _GenerateEnumSource(self, enum):
exports = self._GetJinjaExports()
exports.update({'enum': enum})
return exports
@UseJinja('struct.java.tmpl')
def GenerateStructSource(self, struct):
exports = self.GetJinjaExports()
def _GenerateStructSource(self, struct):
exports = self._GetJinjaExports()
exports.update({'struct': struct})
return exports
@UseJinja('union.java.tmpl')
def GenerateUnionSource(self, union):
exports = self.GetJinjaExports()
def _GenerateUnionSource(self, union):
exports = self._GetJinjaExports()
exports.update({'union': union})
return exports
@UseJinja('interface.java.tmpl')
def GenerateInterfaceSource(self, interface):
return self.GetJinjaExportsForInterface(interface)
def _GenerateInterfaceSource(self, interface):
return self._GetJinjaExportsForInterface(interface)
@UseJinja('interface_internal.java.tmpl')
def GenerateInterfaceInternalSource(self, interface):
return self.GetJinjaExportsForInterface(interface)
def _GenerateInterfaceInternalSource(self, interface):
return self._GetJinjaExportsForInterface(interface)
@UseJinja('constants.java.tmpl')
def GenerateConstantsSource(self, module):
exports = self.GetJinjaExports()
def _GenerateConstantsSource(self, module):
exports = self._GetJinjaExports()
exports.update({'main_entity': GetConstantsMainEntityName(module),
'constants': module.constants})
return exports
def DoGenerateFiles(self):
def _DoGenerateFiles(self):
fileutil.EnsureDirectoryExists(self.output_dir)
# Keep this above the others as .GetStructs() changes the state of the
# module, annotating structs with required information.
for struct in self.GetStructs():
self.Write(self.GenerateStructSource(struct),
self.Write(self._GenerateStructSource(struct),
'%s.java' % GetNameForElement(struct))
for union in self.module.unions:
self.Write(self.GenerateUnionSource(union),
self.Write(self._GenerateUnionSource(union),
'%s.java' % GetNameForElement(union))
for enum in self.module.enums:
self.Write(self.GenerateEnumSource(enum),
self.Write(self._GenerateEnumSource(enum),
'%s.java' % GetNameForElement(enum))
for interface in self.GetInterfaces():
self.Write(self.GenerateInterfaceSource(interface),
self.Write(self._GenerateInterfaceSource(interface),
'%s.java' % GetNameForElement(interface))
self.Write(self.GenerateInterfaceInternalSource(interface),
self.Write(self._GenerateInterfaceInternalSource(interface),
'%s_Internal.java' % GetNameForElement(interface))
if self.module.constants:
self.Write(self.GenerateConstantsSource(self.module),
self.Write(self._GenerateConstantsSource(self.module),
'%s.java' % GetConstantsMainEntityName(self.module))
def GenerateFiles(self, unparsed_args):
......@@ -529,13 +526,13 @@ class Generator(generator.Generator):
zip_filename = os.path.join(self.output_dir, basename)
with TempDir() as temp_java_root:
self.output_dir = os.path.join(temp_java_root, package_path)
self.DoGenerateFiles();
self._DoGenerateFiles();
build_utils.ZipDir(zip_filename, temp_java_root)
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();
self._DoGenerateFiles();
def GetJinjaParameters(self):
return {
......
......@@ -342,47 +342,10 @@ def GetRelativePath(module, base_module):
class Generator(generator.Generator):
js_filters = {
"decode_snippet": JavaScriptDecodeSnippet,
"default_value": JavaScriptDefaultValue,
"encode_snippet": JavaScriptEncodeSnippet,
"expression_to_text": ExpressionToText,
"field_offset": JavaScriptFieldOffset,
"has_callbacks": mojom.HasCallbacks,
"is_any_handle_or_interface_field": IsAnyHandleOrInterfaceField,
"is_array_pointer_field": IsArrayPointerField,
"is_associated_interface_field": IsAssociatedInterfaceField,
"is_associated_interface_request_field": IsAssociatedInterfaceRequestField,
"is_bool_field": IsBoolField,
"is_enum_field": IsEnumField,
"is_handle_field": IsHandleField,
"is_interface_field": IsInterfaceField,
"is_interface_request_field": IsInterfaceRequestField,
"is_map_pointer_field": IsMapPointerField,
"is_object_field": IsObjectField,
"is_string_pointer_field": IsStringPointerField,
"is_struct_pointer_field": IsStructPointerField,
"is_union_field": IsUnionField,
"js_type": JavaScriptType,
"method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
"payload_size": JavaScriptPayloadSize,
"get_relative_path": GetRelativePath,
"stylize_method": generator.StudlyCapsToCamel,
"union_decode_snippet": JavaScriptUnionDecodeSnippet,
"union_encode_snippet": JavaScriptUnionEncodeSnippet,
"validate_array_params": JavaScriptValidateArrayParams,
"validate_enum_params": JavaScriptValidateEnumParams,
"validate_map_params": JavaScriptValidateMapParams,
"validate_nullable_params": JavaScriptNullableParam,
"validate_struct_params": JavaScriptValidateStructParams,
"validate_union_params": JavaScriptValidateUnionParams,
}
def GetParameters(self):
def _GetParameters(self):
return {
"namespace": self.module.namespace,
"imports": self.GetImports(),
"imports": self._GetImports(),
"kinds": self.module.kinds,
"enums": self.module.enums,
"module": self.module,
......@@ -390,29 +353,64 @@ class Generator(generator.Generator):
"unions": self.GetUnions(),
"use_new_js_bindings": self.use_new_js_bindings,
"interfaces": self.GetInterfaces(),
"imported_interfaces": self.GetImportedInterfaces(),
"imported_interfaces": self._GetImportedInterfaces(),
}
@staticmethod
def GetTemplatePrefix():
return "js_templates"
@classmethod
def GetFilters(cls):
return cls.js_filters
def GetFilters(self):
js_filters = {
"decode_snippet": JavaScriptDecodeSnippet,
"default_value": JavaScriptDefaultValue,
"encode_snippet": JavaScriptEncodeSnippet,
"expression_to_text": ExpressionToText,
"field_offset": JavaScriptFieldOffset,
"has_callbacks": mojom.HasCallbacks,
"is_any_handle_or_interface_field": IsAnyHandleOrInterfaceField,
"is_array_pointer_field": IsArrayPointerField,
"is_associated_interface_field": IsAssociatedInterfaceField,
"is_associated_interface_request_field":
IsAssociatedInterfaceRequestField,
"is_bool_field": IsBoolField,
"is_enum_field": IsEnumField,
"is_handle_field": IsHandleField,
"is_interface_field": IsInterfaceField,
"is_interface_request_field": IsInterfaceRequestField,
"is_map_pointer_field": IsMapPointerField,
"is_object_field": IsObjectField,
"is_string_pointer_field": IsStringPointerField,
"is_struct_pointer_field": IsStructPointerField,
"is_union_field": IsUnionField,
"js_type": JavaScriptType,
"method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
"payload_size": JavaScriptPayloadSize,
"get_relative_path": GetRelativePath,
"stylize_method": generator.StudlyCapsToCamel,
"union_decode_snippet": JavaScriptUnionDecodeSnippet,
"union_encode_snippet": JavaScriptUnionEncodeSnippet,
"validate_array_params": JavaScriptValidateArrayParams,
"validate_enum_params": JavaScriptValidateEnumParams,
"validate_map_params": JavaScriptValidateMapParams,
"validate_nullable_params": JavaScriptNullableParam,
"validate_struct_params": JavaScriptValidateStructParams,
"validate_union_params": JavaScriptValidateUnionParams,
}
return js_filters
@UseJinja("module.amd.tmpl")
def GenerateAMDModule(self):
return self.GetParameters()
def _GenerateAMDModule(self):
return self._GetParameters()
def GenerateFiles(self, args):
if self.variant:
raise Exception("Variants not supported in JavaScript bindings.")
self.Write(self.GenerateAMDModule(),
self.Write(self._GenerateAMDModule(),
self.MatchMojomFilePath("%s.js" % self.module.name))
def GetImports(self):
def _GetImports(self):
used_names = set()
for each_import in self.module.imports:
simple_name = each_import["module_name"].split(".")[0]
......@@ -430,7 +428,7 @@ class Generator(generator.Generator):
counter += 1
return self.module.imports
def GetImportedInterfaces(self):
def _GetImportedInterfaces(self):
interface_to_import = {};
for each_import in self.module.imports:
for each_interface in each_import["module"].interfaces:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment