Skip to content

Commit a96cd48

Browse files
committed
[Java] Fix formatting of output so there are no trailing '|' characters unless an optional value is not present in an extended type.
1 parent f70c477 commit a96cd48

File tree

3 files changed

+50
-18
lines changed

3 files changed

+50
-18
lines changed

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

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,14 +2361,22 @@ private CharSequence generateCompositeDecoderDisplay(final List<Token> tokens, f
23612361
append(sb, indent, "public StringBuilder appendTo(final StringBuilder builder)");
23622362
append(sb, indent, "{");
23632363
Separators.BEGIN_COMPOSITE.appendToGeneratedBuilder(sb, indent + INDENT, "builder");
2364+
2365+
int lengthBeforeLastGeneratedSeparator = -1;
2366+
23642367
for (int i = 1, end = tokens.size() - 1; i < end; )
23652368
{
23662369
final Token encodingToken = tokens.get(i);
23672370
final String propertyName = formatPropertyName(encodingToken.name());
2368-
writeTokenDisplay(propertyName, encodingToken, sb, indent + INDENT);
2371+
lengthBeforeLastGeneratedSeparator = writeTokenDisplay(propertyName, encodingToken, sb, indent + INDENT);
23692372
i += encodingToken.componentTokenCount();
23702373
}
23712374

2375+
if (-1 != lengthBeforeLastGeneratedSeparator)
2376+
{
2377+
sb.setLength(lengthBeforeLastGeneratedSeparator);
2378+
}
2379+
23722380
Separators.END_COMPOSITE.appendToGeneratedBuilder(sb, indent + INDENT, "builder");
23732381
sb.append('\n');
23742382
append(sb, indent, " return builder;");
@@ -2492,14 +2500,26 @@ private StringBuilder appendDecoderDisplay(
24922500
final List<Token> varData,
24932501
final String indent)
24942502
{
2495-
eachField(
2496-
fields,
2497-
(fieldToken, typeToken) ->
2503+
int lengthBeforeLastGeneratedSeparator = -1;
2504+
2505+
for (int i = 0, size = fields.size(); i < size;)
2506+
{
2507+
final Token fieldToken = fields.get(i);
2508+
if (fieldToken.signal() == Signal.BEGIN_FIELD)
24982509
{
2510+
final Token encodingToken = fields.get(i + 1);
2511+
24992512
final String fieldName = formatPropertyName(fieldToken.name());
25002513
append(sb, indent, "//" + fieldToken);
2501-
writeTokenDisplay(fieldName, typeToken, sb, indent);
2502-
});
2514+
lengthBeforeLastGeneratedSeparator = writeTokenDisplay(fieldName, encodingToken, sb, indent);
2515+
2516+
i += fieldToken.componentTokenCount();
2517+
}
2518+
else
2519+
{
2520+
++i;
2521+
}
2522+
}
25032523

25042524
for (int i = 0, size = groups.size(); i < size; i++)
25052525
{
@@ -2525,7 +2545,10 @@ private StringBuilder appendDecoderDisplay(
25252545
append(sb, indent, " }");
25262546
append(sb, indent, " builder.setLength(builder.length() - 1);");
25272547
append(sb, indent, "}");
2528-
append(sb, indent, "builder.append(\"" + Separators.END_GROUP + Separators.FIELD + "\");");
2548+
Separators.END_GROUP.appendToGeneratedBuilder(sb, indent, "builder");
2549+
2550+
lengthBeforeLastGeneratedSeparator = sb.length();
2551+
Separators.FIELD.appendToGeneratedBuilder(sb, indent, "builder");
25292552

25302553
i = findEndSignal(groups, i, Signal.END_GROUP, groupToken.name());
25312554
}
@@ -2543,15 +2566,22 @@ private StringBuilder appendDecoderDisplay(
25432566
final String varDataName = formatPropertyName(varDataToken.name());
25442567
append(sb, indent, "builder.append(\"" + varDataName + Separators.KEY_VALUE + "\");");
25452568
append(sb, indent, "builder.append(" + varDataName + "());");
2569+
2570+
lengthBeforeLastGeneratedSeparator = sb.length();
25462571
Separators.FIELD.appendToGeneratedBuilder(sb, indent, "builder");
25472572

25482573
i += varDataToken.componentTokenCount();
25492574
}
25502575

2576+
if (-1 != lengthBeforeLastGeneratedSeparator)
2577+
{
2578+
sb.setLength(lengthBeforeLastGeneratedSeparator);
2579+
}
2580+
25512581
return sb;
25522582
}
25532583

2554-
private void writeTokenDisplay(
2584+
private int writeTokenDisplay(
25552585
final String fieldName,
25562586
final Token typeToken,
25572587
final StringBuilder sb,
@@ -2561,7 +2591,7 @@ private void writeTokenDisplay(
25612591

25622592
if (typeToken.encodedLength() <= 0 || typeToken.isConstantEncoding())
25632593
{
2564-
return;
2594+
return -1;
25652595
}
25662596

25672597
append(sb, indent, "builder.append(\"" + fieldName + Separators.KEY_VALUE + "\");");
@@ -2588,7 +2618,7 @@ private void writeTokenDisplay(
25882618
append(sb, indent, " builder.append(" + fieldName + "(i));");
25892619
Separators.ENTRY.appendToGeneratedBuilder(sb, indent + INDENT + INDENT, "builder");
25902620
append(sb, indent, " }");
2591-
append(sb, indent, " builder.setLength(builder.length()-1);");
2621+
append(sb, indent, " builder.setLength(builder.length() - 1);");
25922622
append(sb, indent, "}");
25932623
Separators.END_ARRAY.appendToGeneratedBuilder(sb, indent, "builder");
25942624
}
@@ -2610,7 +2640,10 @@ private void writeTokenDisplay(
26102640
break;
26112641
}
26122642

2643+
final int lengthBeforeFieldSeparator = sb.length();
26132644
Separators.FIELD.appendToGeneratedBuilder(sb, indent, "builder");
2645+
2646+
return lengthBeforeFieldSeparator;
26142647
}
26152648

26162649
private void appendToString(final StringBuilder sb, final String indent)

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public void appendToGeneratedBuilder(final StringBuilder builder, final String i
6060
append(builder, indent, generatedBuilder + ".append('" + symbol + "');");
6161
}
6262

63-
@Override
6463
public String toString()
6564
{
6665
return String.valueOf(symbol);

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ public void exampleMessagePrinted() throws Exception
2828
"extras={sportsPack,cruiseControl}|" +
2929
"engine=(capacity=2000|numCylinders=4|manufacturerCode=123|)|" +
3030
"fuelFigures=[" +
31-
"(speed=30|mpg=35.9|)," +
32-
"(speed=55|mpg=49.0|)," +
33-
"(speed=75|mpg=40.0|)]|" +
31+
"(speed=30|mpg=35.9)," +
32+
"(speed=55|mpg=49.0)," +
33+
"(speed=75|mpg=40.0)]|" +
3434
"performanceFigures=[" +
35-
"(octaneRating=95|acceleration=[(mph=30|seconds=4.0|),(mph=60|seconds=7.5|),(mph=100|seconds=12.2|)]|)," +
36-
"(octaneRating=99|acceleration=[(mph=30|seconds=3.8|),(mph=60|seconds=7.1|),(mph=100|seconds=11.8|)]|)]|" +
37-
"make=Honda|model=Civic VTi|activationCode=|",
35+
"(octaneRating=95|acceleration=[(mph=30|seconds=4.0),(mph=60|seconds=7.5),(mph=100|seconds=12.2)])," +
36+
"(octaneRating=99|acceleration=[(mph=30|seconds=3.8),(mph=60|seconds=7.1),(mph=100|seconds=11.8)])]|" +
37+
"make=Honda|model=Civic VTi|activationCode=",
3838
result);
3939
}
4040

@@ -50,7 +50,7 @@ public void emptyMessagePrinted() throws Exception
5050
"(sbeTemplateId=1|sbeSchemaId=1|sbeSchemaVersion=0|sbeBlockLength=45):" +
5151
"serialNumber=0|modelYear=0|available=F|code=NULL_VAL|someNumbers=[0,0,0,0,0]|vehicleCode=|extras={}|" +
5252
"engine=(capacity=0|numCylinders=0|manufacturerCode=|)|" +
53-
"fuelFigures=[]|performanceFigures=[]|make=|model=|activationCode=|",
53+
"fuelFigures=[]|performanceFigures=[]|make=|model=|activationCode=",
5454
result);
5555
}
5656
}

0 commit comments

Comments
 (0)