Chromium Code Reviews| 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 ec897f750f2b97d4824cb6d1540355ae48b6f221..2065ebf2d83211228b60f04cd1fac6c974d999fc 100644 |
| --- a/mojo/public/tools/bindings/generators/mojom_java_generator.py |
| +++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py |
| @@ -5,6 +5,7 @@ |
| """Generates java source files from a mojom.Module.""" |
| import argparse |
| +import ast |
| import os |
| import re |
| @@ -208,8 +209,15 @@ def DefaultValue(context, field): |
| if isinstance(field.kind, mojom.Struct): |
| assert field.default == "default" |
| return "new %s()" % GetJavaType(context, field.kind) |
| - return "(%s) %s" % (GetJavaType(context, field.kind), |
| - ExpressionToText(context, field.default)) |
| + return "(%s) %s" % ( |
| + GetJavaType(context, field.kind), |
| + ExpressionToText(context, field.default, kind_spec=field.kind.spec)) |
| + |
| +@contextfilter |
| +def ConstantValue(context, constant): |
| + return "(%s) %s" % ( |
| + GetJavaType(context, constant.kind), |
| + ExpressionToText(context, constant.value, kind_spec=constant.kind.spec)) |
| @contextfilter |
| def NewArray(context, kind, size): |
| @@ -218,7 +226,7 @@ def NewArray(context, kind, size): |
| return 'new %s[%s]' % (GetJavaType(context, kind.kind), size) |
| @contextfilter |
| -def ExpressionToText(context, token): |
| +def ExpressionToText(context, token, kind_spec=''): |
| def _TranslateNamedValue(named_value): |
| entity_name = GetNameForElement(named_value) |
| if named_value.parent_kind: |
| @@ -233,9 +241,14 @@ def ExpressionToText(context, token): |
| if isinstance(token, mojom.NamedValue): |
| return _TranslateNamedValue(token) |
| - # Add Long suffix to all number literals. |
| - if re.match('^[0-9]+$', token): |
| - number = int(token) |
| + if kind_spec.startswith('i') or kind_spec.startswith('u'): |
|
qsr
2014/07/16 09:08:38
What would happen for enum value >= 2**31?
Or is i
Sam McNally
2014/07/16 09:38:49
I expect they would be treated the same as uint32
|
| + # Add Long suffix to all integer literals. |
| + try: |
| + number = ast.literal_eval(token) |
| + except ValueError: |
|
qsr
2014/07/16 09:08:38
Hum... You need this when an integer reference a c
Sam McNally
2014/07/16 09:38:49
References to other constants or enum values are h
qsr
2014/07/16 09:41:35
Thanks.
|
| + return token |
| + if not isinstance(number, (int, long)): |
| + return token |
| # If the literal is too large to fit a signed long, convert it to the |
| # equivalent signed long. |
| if number >= 2 ** 63: |
| @@ -261,6 +274,7 @@ class Generator(generator.Generator): |
| java_filters = { |
| "interface_response_name": GetInterfaceResponseName, |
| + "constant_value": ConstantValue, |
| "default_value": DefaultValue, |
| "decode_method": DecodeMethod, |
| "expression_to_text": ExpressionToText, |