| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 Go source files from a mojom.Module.''' | 5 '''Generates Go source files from a mojom.Module.''' |
| 6 | 6 |
| 7 from itertools import chain | 7 from itertools import chain |
| 8 import os | 8 import os |
| 9 import re | 9 import re |
| 10 | 10 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 return GetFullName(element) | 151 return GetFullName(element) |
| 152 | 152 |
| 153 def GetNameForElement(element, exported=True): | 153 def GetNameForElement(element, exported=True): |
| 154 if (mojom.IsInterfaceKind(element) or mojom.IsStructKind(element) | 154 if (mojom.IsInterfaceKind(element) or mojom.IsStructKind(element) |
| 155 or mojom.IsUnionKind(element)): | 155 or mojom.IsUnionKind(element)): |
| 156 return GetFullName(element, exported) | 156 return GetFullName(element, exported) |
| 157 if isinstance(element, (mojom.EnumField, | 157 if isinstance(element, (mojom.EnumField, |
| 158 mojom.Field, | 158 mojom.Field, |
| 159 mojom.Method, | 159 mojom.Method, |
| 160 mojom.Parameter)): | 160 mojom.Parameter)): |
| 161 return FormatName(element.name, exported) | 161 element_name = (element.go_name if hasattr(element, "go_name") |
| 162 else element.name) |
| 163 return FormatName(element_name, exported) |
| 162 if isinstance(element, (mojom.Enum, | 164 if isinstance(element, (mojom.Enum, |
| 163 mojom.Constant, | 165 mojom.Constant, |
| 164 mojom.ConstantValue)): | 166 mojom.ConstantValue)): |
| 165 return GetNameForNestedElement(element) | 167 return GetNameForNestedElement(element) |
| 166 raise Exception('Unexpected element: %s' % element) | 168 raise Exception('Unexpected element: %s' % element) |
| 167 | 169 |
| 168 def ExpressionToText(token): | 170 def ExpressionToText(token): |
| 169 if isinstance(token, mojom.EnumValue): | 171 if isinstance(token, mojom.EnumValue): |
| 170 return "%s_%s" % (GetNameForNestedElement(token.enum), | 172 return "%s_%s" % (GetNameForNestedElement(token.enum), |
| 171 FormatName(token.name, True)) | 173 FormatName(token.name, True)) |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 # Each Interface has a service description that uses this. | 418 # Each Interface has a service description that uses this. |
| 417 imports[_service_describer_pkg] = _service_describer_pkg_short | 419 imports[_service_describer_pkg] = _service_describer_pkg_short |
| 418 | 420 |
| 419 # TODO(rogulenko): add these after generating constants and struct defaults. | 421 # TODO(rogulenko): add these after generating constants and struct defaults. |
| 420 # for constant in GetAllConstants(self.module): | 422 # for constant in GetAllConstants(self.module): |
| 421 # AddImport(imports, mojom_imports, self.module, constant.value) | 423 # AddImport(imports, mojom_imports, self.module, constant.value) |
| 422 | 424 |
| 423 return imports, mojom_imports | 425 return imports, mojom_imports |
| 424 | 426 |
| 425 # Overrides the implementation from the base class in order to customize the | 427 # Overrides the implementation from the base class in order to customize the |
| 426 # struct and field names. | 428 # struct and field names. Since the Python objects representing the struct |
| 429 # and fields are shared by all language generators we don't want to actually |
| 430 # modify the |name| property. Instead we add a |go_name| property. |
| 427 def _GetStructFromMethod(self, method): | 431 def _GetStructFromMethod(self, method): |
| 428 params_class = "%s_%s_Params" % (GetNameForElement(method.interface), | 432 self._AddStructComputedData(False, method.param_struct) |
| 429 GetNameForElement(method)) | 433 # Only generate the go_names if they have not already been generated. |
| 430 struct = mojom.Struct(params_class, module=method.interface.module) | 434 if not hasattr(method.param_struct, "go_name"): |
| 431 for param in method.parameters: | 435 method.param_struct.go_name = "%s_%s_Params" % ( |
| 432 struct.AddField("in%s" % GetNameForElement(param), | 436 GetNameForElement(method.interface), GetNameForElement(method)) |
| 433 param.kind, param.ordinal, attributes=param.attributes) | 437 for field in method.param_struct.fields: |
| 434 return self._AddStructComputedData(False, struct) | 438 field.go_name = "in%s" % GetNameForElement(field) |
| 439 return method.param_struct |
| 435 | 440 |
| 436 # Overrides the implementation from the base class in order to customize the | 441 # Overrides the implementation from the base class in order to customize the |
| 437 # struct and field names. | 442 # struct and field names. Since the Python objects representing the struct |
| 443 # and fields are shared by all language generators we don't want to actually |
| 444 # modify the |name| property. Instead we add a |go_name| property. |
| 438 def _GetResponseStructFromMethod(self, method): | 445 def _GetResponseStructFromMethod(self, method): |
| 439 params_class = "%s_%s_ResponseParams" % ( | 446 self._AddStructComputedData(False, method.response_param_struct) |
| 440 GetNameForElement(method.interface), GetNameForElement(method)) | 447 if not hasattr(method.response_param_struct, "go_name"): |
| 441 struct = mojom.Struct(params_class, module=method.interface.module) | 448 # Only generate the go_names if they have not already been generated. |
| 442 for param in method.response_parameters: | 449 method.response_param_struct.go_name = "%s_%s_ResponseParams" % ( |
| 443 struct.AddField("out%s" % GetNameForElement(param), | 450 GetNameForElement(method.interface), GetNameForElement(method)) |
| 444 param.kind, param.ordinal, attributes=param.attributes) | 451 for field in method.response_param_struct.fields: |
| 445 return self._AddStructComputedData(False, struct) | 452 field.go_name = "out%s" % GetNameForElement(field) |
| 453 return method.response_param_struct |
| OLD | NEW |