Skip to content

Commit ad98bfa

Browse files
committed
[Java] Cope with optional composites not being present when pretty printing decoders for debugging. Issue #708.
1 parent d83b5b9 commit ad98bfa

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3207,9 +3207,7 @@ private void appendDecoderDisplay(
32073207
if (fieldToken.signal() == Signal.BEGIN_FIELD)
32083208
{
32093209
final Token encodingToken = fields.get(i + 1);
3210-
32113210
final String fieldName = formatPropertyName(fieldToken.name());
3212-
append(sb, indent, "//" + fieldToken);
32133211
lengthBeforeLastGeneratedSeparator = writeTokenDisplay(fieldName, encodingToken, sb, indent);
32143212

32153213
i += fieldToken.componentTokenCount();
@@ -3228,8 +3226,6 @@ private void appendDecoderDisplay(
32283226
throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken);
32293227
}
32303228

3231-
append(sb, indent, "//" + groupToken);
3232-
32333229
final String groupName = formatPropertyName(groupToken.name());
32343230
final String groupDecoderName = decoderName(formatClassName(groupToken.name()));
32353231

@@ -3261,8 +3257,6 @@ private void appendDecoderDisplay(
32613257
throw new IllegalStateException("tokens must begin with BEGIN_VAR_DATA: token=" + varDataToken);
32623258
}
32633259

3264-
append(sb, indent, "//" + varDataToken);
3265-
32663260
final String characterEncoding = varData.get(i + 3).encoding().characterEncoding();
32673261
final String varDataName = formatPropertyName(varDataToken.name());
32683262
append(sb, indent, "builder.append(\"" + varDataName + Separators.KEY_VALUE + "\");");
@@ -3293,8 +3287,6 @@ private void appendDecoderDisplay(
32933287
private int writeTokenDisplay(
32943288
final String fieldName, final Token typeToken, final StringBuilder sb, final String indent)
32953289
{
3296-
append(sb, indent, "//" + typeToken);
3297-
32983290
if (typeToken.encodedLength() <= 0 || typeToken.isConstantEncoding())
32993291
{
33003292
return -1;
@@ -3343,8 +3335,19 @@ private int writeTokenDisplay(
33433335
break;
33443336

33453337
case BEGIN_COMPOSITE:
3346-
append(sb, indent, fieldName + "().appendTo(builder);");
3338+
{
3339+
final String typeName = formatClassName(decoderName(typeToken.applicableTypeName()));
3340+
append(sb, indent, "final " + typeName + " " + fieldName + " = " + fieldName + "();");
3341+
append(sb, indent, "if (" + fieldName + " != null)");
3342+
append(sb, indent, "{");
3343+
append(sb, indent, " " + fieldName + ".appendTo(builder);");
3344+
append(sb, indent, "}");
3345+
append(sb, indent, "else");
3346+
append(sb, indent, "{");
3347+
append(sb, indent, " builder.append(\"null\");");
3348+
append(sb, indent, "}");
33473349
break;
3350+
}
33483351
}
33493352

33503353
final int lengthBeforeFieldSeparator = sb.length();

0 commit comments

Comments
 (0)