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 {
checkField(DefaultsTest.class.getField("a3"), short.class, test, (short) 34567);
checkField(DefaultsTest.class.getField("a4"), int.class, test, 123456);
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.
checkField(DefaultsTest.class.getField("a7"), long.class, test, -8446744073709551617L);
checkField(DefaultsTest.class.getField("a8"), int.class, test, 0x12345);
......@@ -200,6 +200,9 @@ public class BindingsTest extends TestCase {
assertNotNull(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([
expect(defaults.a3).toBe(34567);
expect(defaults.a4).toBe(123456);
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
// expected and actual values have the same closest double value.
expect(defaults.a7).toBe(9999999999999999999);
......@@ -125,6 +125,9 @@ define([
expect(defaults.a22.shape).toBe(imported.Shape.RECTANGLE);
expect(defaults.a22.color).toBe(imported2.Color.BLACK);
expect(defaults.a21).toBeNull();
expect(defaults.a23).toBe(0xFFFFFFFFFFFFFFFF);
expect(defaults.a24).toBe(0x123456789);
expect(defaults.a25).toBe(-0x123456789);
}
function ServiceImpl() {
......
......@@ -354,7 +354,7 @@ TEST_F(BindingsSampleTest, DefaultValues) {
EXPECT_EQ(34567U, defaults->a3);
EXPECT_EQ(123456, defaults->a4);
EXPECT_EQ(3456789012U, defaults->a5);
EXPECT_EQ(111111111111LL, defaults->a6);
EXPECT_EQ(-111111111111LL, defaults->a6);
EXPECT_EQ(9999999999999999999ULL, defaults->a7);
EXPECT_EQ(0x12345, defaults->a8);
EXPECT_EQ(-0x12345, defaults->a9);
......@@ -373,6 +373,9 @@ TEST_F(BindingsSampleTest, DefaultValues) {
ASSERT_FALSE(defaults->a22.is_null());
EXPECT_EQ(imported::SHAPE_RECTANGLE, defaults->a22->shape);
EXPECT_EQ(imported::COLOR_BLACK, defaults->a22->color);
EXPECT_EQ(0xFFFFFFFFFFFFFFFFULL, defaults->a23);
EXPECT_EQ(0x123456789, defaults->a24);
EXPECT_EQ(-0x123456789, defaults->a25);
}
} // namespace
......
......@@ -51,7 +51,7 @@ struct DefaultsTest {
uint16 a3@3 = 34567;
int32 a4@4 = 123456;
uint32 a5@5 = 3456789012;
int64 a6@6 = 111111111111;
int64 a6@6 = -111111111111;
uint64 a7@7 = 9999999999999999999;
int32 a8@8 = 0x12345;
int32 a9@9 = -0x12345;
......@@ -72,6 +72,10 @@ struct DefaultsTest {
Bar.Type a20@20 = BOTH;
imported.Point a21@21;
imported.Thing a22@22 = default;
uint64 a23@23 = 0xFFFFFFFFFFFFFFFF;
int64 a24@24 = 0x123456789;
int64 a25@25 = -0x123456789;
};
struct StructWithHoleV1 {
......
{% 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 %}
{%- macro enum_value(enum, field, index) -%}
{%- if field.value -%}
(int) ({{field.value|expression_to_text}})
(int) ({{field.value|expression_to_text('i32')}})
{%- elif index == 0 -%}
0
{%- else -%}
......
......@@ -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,
......
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