| 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..ee121e75cc5d6a0582e80feda13c2572333ce08f 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,12 @@ 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'):
|
| + # Add Long suffix to all integer literals.
|
| + number = ast.literal_eval(token.lstrip('+ '))
|
| + if not isinstance(number, (int, long)):
|
| + raise ValueError('got unexpected type %r for int literal %r' % (
|
| + type(number), 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 +272,7 @@ class Generator(generator.Generator):
|
|
|
| java_filters = {
|
| "interface_response_name": GetInterfaceResponseName,
|
| + "constant_value": ConstantValue,
|
| "default_value": DefaultValue,
|
| "decode_method": DecodeMethod,
|
| "expression_to_text": ExpressionToText,
|
|
|