Skip to content

Commit d237d5c

Browse files
Stephen Cobbezjiuyang
Stephen Cobbe
authored andcommitted
Support empty struct.
1 parent 91b3c39 commit d237d5c

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

generator/java.stoneg.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,8 @@ def write_imports(self):
10291029
def java_default_value(self, field):
10301030
assert isinstance(field, Field), repr(field)
10311031
assert field.has_default, repr(field)
1032-
return self.java_value(field.data_type, field.default)
1032+
default_value = '\"\"' if field.default == '' else field.default
1033+
return self.java_value(field.data_type, default_value)
10331034

10341035
def java_value(self, data_type, stone_value):
10351036
assert isinstance(data_type, DataType), repr(data_type)
@@ -3833,17 +3834,19 @@ def generate_struct_deserialize(self, data_type):
38333834
default_value = w.java_default_value(field) if field.has_default else 'null'
38343835
w.out('%s f_%s = %s;',
38353836
j.java_class(field, boxed=True), j.param_name(field), default_value)
3836-
with w.block('while (p.getCurrentToken() == JsonToken.FIELD_NAME)'):
3837-
w.out('String field = p.getCurrentName();')
3838-
w.out('p.nextToken();')
3839-
3840-
for i, field in enumerate(data_type.all_fields):
3841-
conditional = 'if' if i == 0 else 'else if'
3842-
serializer = w.java_serializer(field.data_type)
3843-
with w.block('%s ("%s".equals(field))', conditional, field.name):
3844-
w.out('f_%s = %s.deserialize(p);', j.param_name(field), serializer)
3845-
with w.block('else'):
3846-
w.out('skipValue(p);')
3837+
3838+
if data_type.all_fields:
3839+
with w.block('while (p.getCurrentToken() == JsonToken.FIELD_NAME)'):
3840+
w.out('String field = p.getCurrentName();')
3841+
w.out('p.nextToken();')
3842+
3843+
for i, field in enumerate(data_type.all_fields):
3844+
conditional = 'if' if i == 0 else 'else if'
3845+
serializer = w.java_serializer(field.data_type)
3846+
with w.block('%s ("%s".equals(field))', conditional, field.name):
3847+
w.out('f_%s = %s.deserialize(p);', j.param_name(field), serializer)
3848+
with w.block('else'):
3849+
w.out('skipValue(p);')
38473850

38483851
for field in data_type.all_fields:
38493852
if field not in data_type.all_optional_fields:

0 commit comments

Comments
 (0)