@@ -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 )
0 commit comments