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

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

Issue 2965803003: Mojo JS bindings: add support to generate "dual-mode" code. (Closed)
Patch Set: . Created 3 years, 5 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
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 JavaScript source files from a mojom.Module.""" 5 """Generates JavaScript source files from a mojom.Module."""
6 6
7 import mojom.generate.generator as generator 7 import mojom.generate.generator as generator
8 import mojom.generate.module as mojom 8 import mojom.generate.module as mojom
9 import mojom.generate.pack as pack 9 import mojom.generate.pack as pack
10 import os 10 import os
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 expected_dimension_sizes.append(0) 88 expected_dimension_sizes.append(0)
89 return expected_dimension_sizes 89 return expected_dimension_sizes
90 90
91 91
92 def GetRelativeUrl(module, base_module): 92 def GetRelativeUrl(module, base_module):
93 return urllib.pathname2url( 93 return urllib.pathname2url(
94 os.path.relpath(module.path, os.path.dirname(base_module.path))) 94 os.path.relpath(module.path, os.path.dirname(base_module.path)))
95 95
96 96
97 class JavaScriptStylizer(generator.Stylizer): 97 class JavaScriptStylizer(generator.Stylizer):
98 def __init__(self, use_new_js_bindings): 98 MODE_RESET = 0
99 self.use_new_js_bindings = use_new_js_bindings 99 MODE_OLD = 1
100 MODE_NEW = 2
101
102 def __init__(self, mode):
103 assert (mode == JavaScriptStylizer.MODE_RESET or
104 mode == JavaScriptStylizer.MODE_OLD or
105 mode == JavaScriptStylizer.MODE_NEW)
106 self.mode = mode
107
108 def StylizeConstant(self, mojom_name):
109 if self.mode == JavaScriptStylizer.MODE_RESET:
110 return ""
111 return mojom_name
100 112
101 def StylizeField(self, mojom_name): 113 def StylizeField(self, mojom_name):
102 if not self.use_new_js_bindings: 114 if self.mode == JavaScriptStylizer.MODE_RESET:
115 return ""
116 if self.mode == JavaScriptStylizer.MODE_OLD:
103 return mojom_name 117 return mojom_name
104 return generator.ToCamel(mojom_name, lower_initial=True) 118 return generator.ToCamel(mojom_name, lower_initial=True)
105 119
120 def StylizeStruct(self, mojom_name):
121 if self.mode == JavaScriptStylizer.MODE_RESET:
122 return ""
123 return mojom_name
124
125 def StylizeUnion(self, mojom_name):
126 if self.mode == JavaScriptStylizer.MODE_RESET:
127 return ""
128 return mojom_name
129
106 def StylizeParameter(self, mojom_name): 130 def StylizeParameter(self, mojom_name):
107 if not self.use_new_js_bindings: 131 if self.mode == JavaScriptStylizer.MODE_RESET:
132 return ""
133 if self.mode == JavaScriptStylizer.MODE_OLD:
108 return mojom_name 134 return mojom_name
109 return generator.ToCamel(mojom_name, lower_initial=True) 135 return generator.ToCamel(mojom_name, lower_initial=True)
110 136
111 def StylizeMethod(self, mojom_name): 137 def StylizeMethod(self, mojom_name):
138 if self.mode == JavaScriptStylizer.MODE_RESET:
139 return ""
112 return generator.ToCamel(mojom_name, lower_initial=True) 140 return generator.ToCamel(mojom_name, lower_initial=True)
113 141
142 def StylizeEnumField(self, mojom_name):
143 if self.mode == JavaScriptStylizer.MODE_RESET:
144 return ""
145 return mojom_name
146
147 def StylizeEnum(self, mojom_name):
148 if self.mode == JavaScriptStylizer.MODE_RESET:
149 return ""
150 return mojom_name
151
114 def StylizeModule(self, mojom_namespace): 152 def StylizeModule(self, mojom_namespace):
115 if not self.use_new_js_bindings: 153 if self.mode == JavaScriptStylizer.MODE_RESET:
154 return ""
155 if self.mode == JavaScriptStylizer.MODE_OLD:
116 return mojom_namespace 156 return mojom_namespace
117 return '.'.join(generator.ToCamel(word, lower_initial=True) 157 return '.'.join(generator.ToCamel(word, lower_initial=True)
118 for word in mojom_namespace.split('.')) 158 for word in mojom_namespace.split('.'))
119 159
120 160
121 class Generator(generator.Generator): 161 class Generator(generator.Generator):
122 def _GetParameters(self): 162 def _GetParameters(self):
123 return { 163 return {
124 "enums": self.module.enums, 164 "enums": self.module.enums,
125 "imports": self.module.imports, 165 "imports": self.module.imports,
126 "interfaces": self.module.interfaces, 166 "interfaces": self.module.interfaces,
127 "kinds": self.module.kinds, 167 "kinds": self.module.kinds,
128 "module": self.module, 168 "module": self.module,
129 "structs": self.module.structs + self._GetStructsFromMethods(), 169 "structs": self.module.structs + self._GetStructsFromMethods(),
130 "unions": self.module.unions, 170 "unions": self.module.unions,
131 "use_new_js_bindings": self.use_new_js_bindings, 171 "js_bindings_mode": self.js_bindings_mode,
132 } 172 }
133 173
134 @staticmethod 174 @staticmethod
135 def GetTemplatePrefix(): 175 def GetTemplatePrefix():
136 return "js_templates" 176 return "js_templates"
137 177
138 def GetFilters(self): 178 def GetFilters(self):
139 js_filters = { 179 js_filters = {
140 "decode_snippet": self._JavaScriptDecodeSnippet, 180 "decode_snippet": self._JavaScriptDecodeSnippet,
141 "default_value": self._JavaScriptDefaultValue, 181 "default_value": self._JavaScriptDefaultValue,
(...skipping 13 matching lines...) Expand all
155 "is_interface_kind": mojom.IsInterfaceKind, 195 "is_interface_kind": mojom.IsInterfaceKind,
156 "is_interface_request_kind": mojom.IsInterfaceRequestKind, 196 "is_interface_request_kind": mojom.IsInterfaceRequestKind,
157 "is_map_kind": mojom.IsMapKind, 197 "is_map_kind": mojom.IsMapKind,
158 "is_object_kind": mojom.IsObjectKind, 198 "is_object_kind": mojom.IsObjectKind,
159 "is_string_kind": mojom.IsStringKind, 199 "is_string_kind": mojom.IsStringKind,
160 "is_struct_kind": mojom.IsStructKind, 200 "is_struct_kind": mojom.IsStructKind,
161 "is_union_kind": mojom.IsUnionKind, 201 "is_union_kind": mojom.IsUnionKind,
162 "js_type": self._JavaScriptType, 202 "js_type": self._JavaScriptType,
163 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds, 203 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
164 "payload_size": JavaScriptPayloadSize, 204 "payload_size": JavaScriptPayloadSize,
205 "set_current_mode": self._SetCurrentMode,
165 "to_camel": generator.ToCamel, 206 "to_camel": generator.ToCamel,
166 "union_decode_snippet": self._JavaScriptUnionDecodeSnippet, 207 "union_decode_snippet": self._JavaScriptUnionDecodeSnippet,
167 "union_encode_snippet": self._JavaScriptUnionEncodeSnippet, 208 "union_encode_snippet": self._JavaScriptUnionEncodeSnippet,
168 "validate_array_params": self._JavaScriptValidateArrayParams, 209 "validate_array_params": self._JavaScriptValidateArrayParams,
169 "validate_enum_params": self._JavaScriptValidateEnumParams, 210 "validate_enum_params": self._JavaScriptValidateEnumParams,
170 "validate_map_params": self._JavaScriptValidateMapParams, 211 "validate_map_params": self._JavaScriptValidateMapParams,
171 "validate_nullable_params": self._JavaScriptNullableParam, 212 "validate_nullable_params": self._JavaScriptNullableParam,
172 "validate_struct_params": self._JavaScriptValidateStructParams, 213 "validate_struct_params": self._JavaScriptValidateStructParams,
173 "validate_union_params": self._JavaScriptValidateUnionParams, 214 "validate_union_params": self._JavaScriptValidateUnionParams,
174 } 215 }
175 return js_filters 216 return js_filters
176 217
177 @UseJinja("module.amd.tmpl") 218 @UseJinja("module.amd.tmpl")
178 def _GenerateAMDModule(self): 219 def _GenerateAMDModule(self):
179 return self._GetParameters() 220 return self._GetParameters()
180 221
181 def GenerateFiles(self, args): 222 def GenerateFiles(self, args):
182 if self.variant: 223 if self.variant:
183 raise Exception("Variants not supported in JavaScript bindings.") 224 raise Exception("Variants not supported in JavaScript bindings.")
184 225
185 self.module.Stylize(JavaScriptStylizer(self.use_new_js_bindings)) 226 self.module.Stylize(JavaScriptStylizer(JavaScriptStylizer.MODE_RESET))
186 227
187 # TODO(yzshen): Remove this method once the old JS bindings go away. 228 # TODO(yzshen): Remove this method once the old JS bindings go away.
188 self._SetUniqueNameForImports() 229 self._SetUniqueNameForImports()
189 230
190 self.Write(self._GenerateAMDModule(), "%s.js" % self.module.path) 231 self.Write(self._GenerateAMDModule(), "%s.js" % self.module.path)
191 232
192 def _SetUniqueNameForImports(self): 233 def _SetUniqueNameForImports(self):
193 used_names = set() 234 used_names = set()
194 for each_import in self.module.imports: 235 for each_import in self.module.imports:
195 simple_name = os.path.basename(each_import.path).split(".")[0] 236 simple_name = os.path.basename(each_import.path).split(".")[0]
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 return self._TranslateConstants(value) 441 return self._TranslateConstants(value)
401 442
402 def _GetStructsFromMethods(self): 443 def _GetStructsFromMethods(self):
403 result = [] 444 result = []
404 for interface in self.module.interfaces: 445 for interface in self.module.interfaces:
405 for method in interface.methods: 446 for method in interface.methods:
406 result.append(method.param_struct) 447 result.append(method.param_struct)
407 if method.response_param_struct is not None: 448 if method.response_param_struct is not None:
408 result.append(method.response_param_struct) 449 result.append(method.response_param_struct)
409 return result 450 return result
451
452 def _SetCurrentMode(self, mode):
453 self.module.Stylize(JavaScriptStylizer(
454 JavaScriptStylizer.MODE_OLD if mode == "old"
455 else JavaScriptStylizer.MODE_NEW))
456 return ""
457
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/generators/js_templates/module_definition.tmpl ('k') | mojo/public/tools/bindings/mojom.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698