Commit 2ea2726b authored by sammc@chromium.org's avatar sammc@chromium.org

Mojo: Always suffix int literals with L in generated Java bindings.

BUG=394186

Review URL: https://codereview.chromium.org/396063006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283903 0039d316-1c4b-4281-b951-d872f2087c98
parent bf60c1e1
...@@ -180,7 +180,7 @@ public class BindingsTest extends TestCase { ...@@ -180,7 +180,7 @@ public class BindingsTest extends TestCase {
checkField(DefaultsTest.class.getField("a3"), short.class, test, (short) 34567); checkField(DefaultsTest.class.getField("a3"), short.class, test, (short) 34567);
checkField(DefaultsTest.class.getField("a4"), int.class, test, 123456); checkField(DefaultsTest.class.getField("a4"), int.class, test, 123456);
checkField(DefaultsTest.class.getField("a5"), int.class, test, (int) 3456789012L); checkField(DefaultsTest.class.getField("a5"), int.class, test, (int) 3456789012L);
checkField(DefaultsTest.class.getField("a6"), long.class, test, 111111111111L); checkField(DefaultsTest.class.getField("a6"), long.class, test, -111111111111L);
// -8446744073709551617 == 9999999999999999999 - 2 ^ 64. // -8446744073709551617 == 9999999999999999999 - 2 ^ 64.
checkField(DefaultsTest.class.getField("a7"), long.class, test, -8446744073709551617L); checkField(DefaultsTest.class.getField("a7"), long.class, test, -8446744073709551617L);
checkField(DefaultsTest.class.getField("a8"), int.class, test, 0x12345); checkField(DefaultsTest.class.getField("a8"), int.class, test, 0x12345);
...@@ -200,6 +200,9 @@ public class BindingsTest extends TestCase { ...@@ -200,6 +200,9 @@ public class BindingsTest extends TestCase {
assertNotNull(test.a22); assertNotNull(test.a22);
checkField(DefaultsTest.class.getField("a22"), Thing.class, test, test.a22); checkField(DefaultsTest.class.getField("a22"), Thing.class, test, test.a22);
checkField(DefaultsTest.class.getField("a23"), long.class, test, -1L);
checkField(DefaultsTest.class.getField("a24"), long.class, test, 0x123456789L);
checkField(DefaultsTest.class.getField("a25"), long.class, test, -0x123456789L);
} }
/** /**
......
...@@ -105,7 +105,7 @@ define([ ...@@ -105,7 +105,7 @@ define([
expect(defaults.a3).toBe(34567); expect(defaults.a3).toBe(34567);
expect(defaults.a4).toBe(123456); expect(defaults.a4).toBe(123456);
expect(defaults.a5).toBe(3456789012); expect(defaults.a5).toBe(3456789012);
expect(defaults.a6).toBe(111111111111); expect(defaults.a6).toBe(-111111111111);
// JS doesn't have a 64 bit integer type so this is just checking that the // JS doesn't have a 64 bit integer type so this is just checking that the
// expected and actual values have the same closest double value. // expected and actual values have the same closest double value.
expect(defaults.a7).toBe(9999999999999999999); expect(defaults.a7).toBe(9999999999999999999);
...@@ -125,6 +125,9 @@ define([ ...@@ -125,6 +125,9 @@ define([
expect(defaults.a22.shape).toBe(imported.Shape.RECTANGLE); expect(defaults.a22.shape).toBe(imported.Shape.RECTANGLE);
expect(defaults.a22.color).toBe(imported2.Color.BLACK); expect(defaults.a22.color).toBe(imported2.Color.BLACK);
expect(defaults.a21).toBeNull(); expect(defaults.a21).toBeNull();
expect(defaults.a23).toBe(0xFFFFFFFFFFFFFFFF);
expect(defaults.a24).toBe(0x123456789);
expect(defaults.a25).toBe(-0x123456789);
} }
function ServiceImpl() { function ServiceImpl() {
......
...@@ -354,7 +354,7 @@ TEST_F(BindingsSampleTest, DefaultValues) { ...@@ -354,7 +354,7 @@ TEST_F(BindingsSampleTest, DefaultValues) {
EXPECT_EQ(34567U, defaults->a3); EXPECT_EQ(34567U, defaults->a3);
EXPECT_EQ(123456, defaults->a4); EXPECT_EQ(123456, defaults->a4);
EXPECT_EQ(3456789012U, defaults->a5); EXPECT_EQ(3456789012U, defaults->a5);
EXPECT_EQ(111111111111LL, defaults->a6); EXPECT_EQ(-111111111111LL, defaults->a6);
EXPECT_EQ(9999999999999999999ULL, defaults->a7); EXPECT_EQ(9999999999999999999ULL, defaults->a7);
EXPECT_EQ(0x12345, defaults->a8); EXPECT_EQ(0x12345, defaults->a8);
EXPECT_EQ(-0x12345, defaults->a9); EXPECT_EQ(-0x12345, defaults->a9);
...@@ -373,6 +373,9 @@ TEST_F(BindingsSampleTest, DefaultValues) { ...@@ -373,6 +373,9 @@ TEST_F(BindingsSampleTest, DefaultValues) {
ASSERT_FALSE(defaults->a22.is_null()); ASSERT_FALSE(defaults->a22.is_null());
EXPECT_EQ(imported::SHAPE_RECTANGLE, defaults->a22->shape); EXPECT_EQ(imported::SHAPE_RECTANGLE, defaults->a22->shape);
EXPECT_EQ(imported::COLOR_BLACK, defaults->a22->color); EXPECT_EQ(imported::COLOR_BLACK, defaults->a22->color);
EXPECT_EQ(0xFFFFFFFFFFFFFFFFULL, defaults->a23);
EXPECT_EQ(0x123456789, defaults->a24);
EXPECT_EQ(-0x123456789, defaults->a25);
} }
} // namespace } // namespace
......
...@@ -51,7 +51,7 @@ struct DefaultsTest { ...@@ -51,7 +51,7 @@ struct DefaultsTest {
uint16 a3@3 = 34567; uint16 a3@3 = 34567;
int32 a4@4 = 123456; int32 a4@4 = 123456;
uint32 a5@5 = 3456789012; uint32 a5@5 = 3456789012;
int64 a6@6 = 111111111111; int64 a6@6 = -111111111111;
uint64 a7@7 = 9999999999999999999; uint64 a7@7 = 9999999999999999999;
int32 a8@8 = 0x12345; int32 a8@8 = 0x12345;
int32 a9@9 = -0x12345; int32 a9@9 = -0x12345;
...@@ -72,6 +72,10 @@ struct DefaultsTest { ...@@ -72,6 +72,10 @@ struct DefaultsTest {
Bar.Type a20@20 = BOTH; Bar.Type a20@20 = BOTH;
imported.Point a21@21; imported.Point a21@21;
imported.Thing a22@22 = default; imported.Thing a22@22 = default;
uint64 a23@23 = 0xFFFFFFFFFFFFFFFF;
int64 a24@24 = 0x123456789;
int64 a25@25 = -0x123456789;
}; };
struct StructWithHoleV1 { struct StructWithHoleV1 {
......
{% macro constant_def(constant) %} {% macro constant_def(constant) %}
public static final {{constant.kind|java_type}} {{constant|name}} = ({{constant.kind|java_type}}) {{constant.value|expression_to_text}}; public static final {{constant.kind|java_type}} {{constant|name}} = {{constant|constant_value}};
{% endmacro %} {% endmacro %}
{%- macro enum_value(enum, field, index) -%} {%- macro enum_value(enum, field, index) -%}
{%- if field.value -%} {%- if field.value -%}
(int) ({{field.value|expression_to_text}}) (int) ({{field.value|expression_to_text('i32')}})
{%- elif index == 0 -%} {%- elif index == 0 -%}
0 0
{%- else -%} {%- else -%}
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
"""Generates java source files from a mojom.Module.""" """Generates java source files from a mojom.Module."""
import argparse import argparse
import ast
import os import os
import re import re
...@@ -208,8 +209,15 @@ def DefaultValue(context, field): ...@@ -208,8 +209,15 @@ def DefaultValue(context, field):
if isinstance(field.kind, mojom.Struct): if isinstance(field.kind, mojom.Struct):
assert field.default == "default" assert field.default == "default"
return "new %s()" % GetJavaType(context, field.kind) return "new %s()" % GetJavaType(context, field.kind)
return "(%s) %s" % (GetJavaType(context, field.kind), return "(%s) %s" % (
ExpressionToText(context, field.default)) 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 @contextfilter
def NewArray(context, kind, size): def NewArray(context, kind, size):
...@@ -218,7 +226,7 @@ def NewArray(context, kind, size): ...@@ -218,7 +226,7 @@ def NewArray(context, kind, size):
return 'new %s[%s]' % (GetJavaType(context, kind.kind), size) return 'new %s[%s]' % (GetJavaType(context, kind.kind), size)
@contextfilter @contextfilter
def ExpressionToText(context, token): def ExpressionToText(context, token, kind_spec=''):
def _TranslateNamedValue(named_value): def _TranslateNamedValue(named_value):
entity_name = GetNameForElement(named_value) entity_name = GetNameForElement(named_value)
if named_value.parent_kind: if named_value.parent_kind:
...@@ -233,9 +241,12 @@ def ExpressionToText(context, token): ...@@ -233,9 +241,12 @@ def ExpressionToText(context, token):
if isinstance(token, mojom.NamedValue): if isinstance(token, mojom.NamedValue):
return _TranslateNamedValue(token) return _TranslateNamedValue(token)
# Add Long suffix to all number literals. if kind_spec.startswith('i') or kind_spec.startswith('u'):
if re.match('^[0-9]+$', token): # Add Long suffix to all integer literals.
number = int(token) 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 # If the literal is too large to fit a signed long, convert it to the
# equivalent signed long. # equivalent signed long.
if number >= 2 ** 63: if number >= 2 ** 63:
...@@ -261,6 +272,7 @@ class Generator(generator.Generator): ...@@ -261,6 +272,7 @@ class Generator(generator.Generator):
java_filters = { java_filters = {
"interface_response_name": GetInterfaceResponseName, "interface_response_name": GetInterfaceResponseName,
"constant_value": ConstantValue,
"default_value": DefaultValue, "default_value": DefaultValue,
"decode_method": DecodeMethod, "decode_method": DecodeMethod,
"expression_to_text": ExpressionToText, "expression_to_text": ExpressionToText,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment