OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 java source files from a mojom.Module.""" | 5 """Generates java source files from a mojom.Module.""" |
6 | 6 |
7 import argparse | 7 import argparse |
8 import ast | 8 import ast |
9 import contextlib | 9 import contextlib |
10 import os | 10 import os |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 | 101 |
102 def UpperCamelCase(name): | 102 def UpperCamelCase(name): |
103 return ''.join([x.capitalize() for x in NameToComponent(name)]) | 103 return ''.join([x.capitalize() for x in NameToComponent(name)]) |
104 | 104 |
105 def CamelCase(name): | 105 def CamelCase(name): |
106 uccc = UpperCamelCase(name) | 106 uccc = UpperCamelCase(name) |
107 return uccc[0].lower() + uccc[1:] | 107 return uccc[0].lower() + uccc[1:] |
108 | 108 |
109 def ConstantStyle(name): | 109 def ConstantStyle(name): |
110 components = NameToComponent(name) | 110 components = NameToComponent(name) |
111 if components[0] == 'k': | 111 if components[0] == 'k' and len(components) > 1: |
112 components = components[1:] | 112 components = components[1:] |
| 113 # variable cannot starts with a digit. |
| 114 if components[0][0].isdigit(): |
| 115 components[0] = '_' + components[0] |
113 return '_'.join([x.upper() for x in components]) | 116 return '_'.join([x.upper() for x in components]) |
114 | 117 |
115 def GetNameForElement(element): | 118 def GetNameForElement(element): |
116 if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or | 119 if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or |
117 mojom.IsStructKind(element)): | 120 mojom.IsStructKind(element)): |
118 return UpperCamelCase(element.name) | 121 return UpperCamelCase(element.name) |
119 if mojom.IsInterfaceRequestKind(element): | 122 if mojom.IsInterfaceRequestKind(element): |
120 return GetNameForElement(element.kind) | 123 return GetNameForElement(element.kind) |
121 if isinstance(element, (mojom.Method, | 124 if isinstance(element, (mojom.Method, |
122 mojom.Parameter, | 125 mojom.Parameter, |
123 mojom.Field)): | 126 mojom.Field)): |
124 return CamelCase(element.name) | 127 return CamelCase(element.name) |
125 if isinstance(element, mojom.EnumValue): | 128 if isinstance(element, mojom.EnumValue): |
126 return (GetNameForElement(element.enum) + '.' + | 129 return (GetNameForElement(element.enum) + '.' + |
127 ConstantStyle(element.name)) | 130 ConstantStyle(element.name)) |
128 if isinstance(element, (mojom.NamedValue, | 131 if isinstance(element, (mojom.NamedValue, |
129 mojom.Constant)): | 132 mojom.Constant, |
| 133 mojom.EnumField)): |
130 return ConstantStyle(element.name) | 134 return ConstantStyle(element.name) |
131 raise Exception('Unexpected element: ' % element) | 135 raise Exception('Unexpected element: %s' % element) |
132 | 136 |
133 def GetInterfaceResponseName(method): | 137 def GetInterfaceResponseName(method): |
134 return UpperCamelCase(method.name + 'Response') | 138 return UpperCamelCase(method.name + 'Response') |
135 | 139 |
136 def ParseStringAttribute(attribute): | 140 def ParseStringAttribute(attribute): |
137 assert isinstance(attribute, basestring) | 141 assert isinstance(attribute, basestring) |
138 return attribute | 142 return attribute |
139 | 143 |
140 def GetJavaTrueFalse(value): | 144 def GetJavaTrueFalse(value): |
141 return 'true' if value else 'false' | 145 return 'true' if value else 'false' |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 @contextfilter | 212 @contextfilter |
209 def EncodeMethod(context, kind, variable, offset, bit): | 213 def EncodeMethod(context, kind, variable, offset, bit): |
210 params = AppendEncodeDecodeParams( | 214 params = AppendEncodeDecodeParams( |
211 [ variable, str(offset) ], context, kind, bit) | 215 [ variable, str(offset) ], context, kind, bit) |
212 return 'encode(%s)' % ', '.join(params) | 216 return 'encode(%s)' % ', '.join(params) |
213 | 217 |
214 def GetPackage(module): | 218 def GetPackage(module): |
215 if 'JavaPackage' in module.attributes: | 219 if 'JavaPackage' in module.attributes: |
216 return ParseStringAttribute(module.attributes['JavaPackage']) | 220 return ParseStringAttribute(module.attributes['JavaPackage']) |
217 # Default package. | 221 # Default package. |
218 return 'org.chromium.mojom.' + module.namespace | 222 if module.namespace: |
| 223 return 'org.chromium.mojom.' + module.namespace |
| 224 return 'org.chromium.mojom' |
219 | 225 |
220 def GetNameForKind(context, kind): | 226 def GetNameForKind(context, kind): |
221 def _GetNameHierachy(kind): | 227 def _GetNameHierachy(kind): |
222 hierachy = [] | 228 hierachy = [] |
223 if kind.parent_kind: | 229 if kind.parent_kind: |
224 hierachy = _GetNameHierachy(kind.parent_kind) | 230 hierachy = _GetNameHierachy(kind.parent_kind) |
225 hierachy.append(GetNameForElement(kind)) | 231 hierachy.append(GetNameForElement(kind)) |
226 return hierachy | 232 return hierachy |
227 | 233 |
228 module = context.resolve('module') | 234 module = context.resolve('module') |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 # This constructs the name of the embedding classes for module level constants | 343 # This constructs the name of the embedding classes for module level constants |
338 # by extracting the mojom's filename and prepending it to Constants. | 344 # by extracting the mojom's filename and prepending it to Constants. |
339 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) + | 345 return (UpperCamelCase(module.path.split('/')[-1].rsplit('.', 1)[0]) + |
340 'Constants') | 346 'Constants') |
341 | 347 |
342 def GetMethodOrdinalName(method): | 348 def GetMethodOrdinalName(method): |
343 return ConstantStyle(method.name) + '_ORDINAL' | 349 return ConstantStyle(method.name) + '_ORDINAL' |
344 | 350 |
345 def HasMethodWithResponse(interface): | 351 def HasMethodWithResponse(interface): |
346 for method in interface.methods: | 352 for method in interface.methods: |
347 if method.response_parameters: | 353 if method.response_parameters is not None: |
348 return True | 354 return True |
349 return False | 355 return False |
350 | 356 |
351 def HasMethodWithoutResponse(interface): | 357 def HasMethodWithoutResponse(interface): |
352 for method in interface.methods: | 358 for method in interface.methods: |
353 if not method.response_parameters: | 359 if method.response_parameters is None: |
354 return True | 360 return True |
355 return False | 361 return False |
356 | 362 |
357 @contextlib.contextmanager | 363 @contextlib.contextmanager |
358 def TempDir(): | 364 def TempDir(): |
359 dirname = tempfile.mkdtemp() | 365 dirname = tempfile.mkdtemp() |
360 try: | 366 try: |
361 yield dirname | 367 yield dirname |
362 finally: | 368 finally: |
363 shutil.rmtree(dirname) | 369 shutil.rmtree(dirname) |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 return { | 495 return { |
490 'lstrip_blocks': True, | 496 'lstrip_blocks': True, |
491 'trim_blocks': True, | 497 'trim_blocks': True, |
492 } | 498 } |
493 | 499 |
494 def GetGlobals(self): | 500 def GetGlobals(self): |
495 return { | 501 return { |
496 'namespace': self.module.namespace, | 502 'namespace': self.module.namespace, |
497 'module': self.module, | 503 'module': self.module, |
498 } | 504 } |
OLD | NEW |