Skip to content

Commit 7822307

Browse files
committed
[Java] Handle null values when encoding enums, i.e. use Enum.NULL_VAL if the value was not assigned.
1 parent 61bf426 commit 7822307

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaDtoGenerator.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ private void generateFieldEncodeWith(
985985
break;
986986

987987
case BEGIN_ENUM:
988-
generateEnumEncodeWith(sb, fieldToken, indent);
988+
generateEnumEncodeWith(sb, fieldToken, typeToken, indent);
989989
break;
990990

991991
case BEGIN_SET:
@@ -1081,18 +1081,30 @@ private void generatePrimitiveValueEncodeWith(
10811081
private void generateEnumEncodeWith(
10821082
final StringBuilder sb,
10831083
final Token fieldToken,
1084+
final Token typeToken,
10841085
final String indent)
10851086
{
10861087
if (fieldToken.isConstantEncoding())
10871088
{
10881089
return;
10891090
}
10901091

1092+
final String enumName = formatClassName(typeToken.applicableTypeName());
10911093
final String propertyName = fieldToken.name();
10921094
final String formattedPropertyName = formatPropertyName(propertyName);
10931095

1094-
sb.append(indent).append("encoder.").append(formattedPropertyName).append("(dto.")
1095-
.append(formattedPropertyName).append("());\n");
1096+
sb.append(indent).append(enumName).append(" ").append(formattedPropertyName).append(" = ")
1097+
.append("dto.").append(formattedPropertyName).append("();\n");
1098+
sb.append(indent).append("if (null != ").append(formattedPropertyName).append(")\n");
1099+
sb.append(indent).append("{\n");
1100+
sb.append(indent).append(indent).append("encoder.").append(formattedPropertyName)
1101+
.append("(").append(formattedPropertyName).append(");\n");
1102+
sb.append(indent).append("}\n");
1103+
sb.append(indent).append("else\n");
1104+
sb.append(indent).append("{\n");
1105+
sb.append(indent).append(indent).append("encoder.").append(formattedPropertyName)
1106+
.append("(").append(enumName).append(".NULL_VAL);\n");
1107+
sb.append(indent).append("}\n");
10961108
}
10971109

10981110
private void generateComplexPropertyEncodeWith(

sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/DtoTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ void dtoWithKeywords()
9292
dto.falsE((byte)1);
9393
dto.import$("char nine");
9494
dto.void$(new int[] {1, 2, 3});
95+
dto.continue$(dto_test.Model.B);
9596

9697
final KeywordsDto.DataDto dto1 = new KeywordsDto.DataDto();
9798
dto1.this$((byte)90);

0 commit comments

Comments
 (0)