@@ -203,13 +203,16 @@ private void generateEncoder(
203203 {
204204 out .append (generateMainHeader (ir .applicableNamespace (), ENCODER , hasVarData ));
205205
206- generateAnnotations (BASE_INDENT , className , groups , out , 0 , this ::encoderName );
206+ if (shouldGenerateGroupOrderAnnotation )
207+ {
208+ generateAnnotations (BASE_INDENT , className , groups , out , this ::encoderName );
209+ }
207210 out .append (generateDeclaration (className , implementsString , msgToken ));
208211 out .append (generateEncoderFlyweightCode (className , msgToken ));
209212
210213 final StringBuilder sb = new StringBuilder ();
211214 generateEncoderFields (sb , className , fields , BASE_INDENT );
212- generateEncoderGroups (sb , className , groups , BASE_INDENT , false );
215+ generateEncoderGroups (sb , className , null , groups , BASE_INDENT , false );
213216 generateEncoderVarData (sb , className , varData , BASE_INDENT );
214217
215218 generateEncoderDisplay (sb , decoderName (msgToken .name ()));
@@ -234,13 +237,16 @@ private void generateDecoder(
234237 {
235238 out .append (generateMainHeader (ir .applicableNamespace (), DECODER , hasVarData ));
236239
237- generateAnnotations (BASE_INDENT , className , groups , out , 0 , this ::decoderName );
240+ if (shouldGenerateGroupOrderAnnotation )
241+ {
242+ generateAnnotations (BASE_INDENT , className , groups , out , this ::decoderName );
243+ }
238244 out .append (generateDeclaration (className , implementsString , msgToken ));
239245 out .append (generateDecoderFlyweightCode (className , msgToken ));
240246
241247 final StringBuilder sb = new StringBuilder ();
242248 generateDecoderFields (sb , fields , BASE_INDENT );
243- generateDecoderGroups (sb , className , groups , BASE_INDENT , false );
249+ generateDecoderGroups (sb , className , null , groups , BASE_INDENT , false );
244250 generateDecoderVarData (sb , varData , BASE_INDENT );
245251
246252 generateDecoderDisplay (sb , msgToken .name (), fields , groups , varData );
@@ -253,6 +259,7 @@ private void generateDecoder(
253259 private void generateDecoderGroups (
254260 final StringBuilder sb ,
255261 final String outerClassName ,
262+ final String outerGroupName ,
256263 final List <Token > tokens ,
257264 final String indent ,
258265 final boolean isSubGroup ) throws IOException
@@ -265,7 +272,7 @@ private void generateDecoderGroups(
265272 throw new IllegalStateException ("tokens must begin with BEGIN_GROUP: token=" + groupToken );
266273 }
267274
268- final int groupIndex = i ;
275+ final int index = i ;
269276 final String groupName = decoderName (formatClassName (groupToken .name ()));
270277
271278 ++i ;
@@ -282,11 +289,16 @@ private void generateDecoderGroups(
282289 i = collectVarData (tokens , i , varData );
283290
284291 generateGroupDecoderProperty (sb , groupName , groupToken , indent , isSubGroup );
285- generateAnnotations (indent + INDENT , groupName , tokens , sb , groupIndex + 1 , this ::decoderName );
286- generateGroupDecoderClassHeader (sb , groupName , outerClassName , tokens , groups , groupIndex , indent + INDENT );
292+ generateTypeJavadoc (sb , indent + INDENT , groupToken );
293+
294+ if (shouldGenerateGroupOrderAnnotation )
295+ {
296+ generateAnnotations (indent + INDENT , groupName , groups , sb , this ::decoderName );
297+ }
298+ generateGroupDecoderClassHeader (sb , groupName , outerClassName , tokens , groups , index , indent + INDENT );
287299
288300 generateDecoderFields (sb , fields , indent + INDENT );
289- generateDecoderGroups (sb , outerClassName , groups , indent + INDENT , true );
301+ generateDecoderGroups (sb , outerClassName , groupName , groups , indent + INDENT , true );
290302 generateDecoderVarData (sb , varData , indent + INDENT );
291303
292304 appendGroupInstanceDecoderDisplay (sb , fields , groups , varData , indent + INDENT );
@@ -298,6 +310,7 @@ private void generateDecoderGroups(
298310 private void generateEncoderGroups (
299311 final StringBuilder sb ,
300312 final String outerClassName ,
313+ final String outerGroupName ,
301314 final List <Token > tokens ,
302315 final String indent ,
303316 final boolean isSubGroup ) throws IOException
@@ -310,7 +323,7 @@ private void generateEncoderGroups(
310323 throw new IllegalStateException ("tokens must begin with BEGIN_GROUP: token=" + groupToken );
311324 }
312325
313- final int groupIndex = i ;
326+ final int index = i ;
314327 final String groupName = groupToken .name ();
315328 final String groupClassName = encoderName (groupName );
316329
@@ -328,11 +341,16 @@ private void generateEncoderGroups(
328341 i = collectVarData (tokens , i , varData );
329342
330343 generateGroupEncoderProperty (sb , groupName , groupToken , indent , isSubGroup );
331- generateAnnotations (indent + INDENT , groupClassName , tokens , sb , groupIndex + 1 , this ::encoderName );
332- generateGroupEncoderClassHeader (sb , groupName , outerClassName , tokens , groups , groupIndex , indent + INDENT );
344+ generateTypeJavadoc (sb , indent + INDENT , groupToken );
345+
346+ if (shouldGenerateGroupOrderAnnotation )
347+ {
348+ generateAnnotations (indent + INDENT , groupClassName , groups , sb , this ::encoderName );
349+ }
350+ generateGroupEncoderClassHeader (sb , groupName , outerClassName , tokens , groups , index , indent + INDENT );
333351
334352 generateEncoderFields (sb , groupClassName , fields , indent + INDENT );
335- generateEncoderGroups (sb , outerClassName , groups , indent + INDENT , true );
353+ generateEncoderGroups (sb , outerClassName , groupClassName , groups , indent + INDENT , true );
336354 generateEncoderVarData (sb , groupClassName , varData , indent + INDENT );
337355
338356 sb .append (indent ).append (" }\n " );
@@ -348,7 +366,6 @@ private void generateGroupDecoderClassHeader(
348366 final int index ,
349367 final String indent )
350368 {
351- final Token groupToken = tokens .get (index );
352369 final String className = formatClassName (groupName );
353370 final int dimensionHeaderLen = tokens .get (index + 1 ).encodedLength ();
354371
@@ -367,7 +384,6 @@ private void generateGroupDecoderClassHeader(
367384
368385 generateGroupDecoderClassDeclaration (
369386 sb ,
370- groupToken ,
371387 groupName ,
372388 parentMessageClassName ,
373389 findSubGroupNames (subGroupTokens ),
@@ -448,12 +464,10 @@ private void generateGroupEncoderClassHeader(
448464 final int index ,
449465 final String ind )
450466 {
451- final Token groupToken = tokens .get (index );
452467 final int dimensionHeaderSize = tokens .get (index + 1 ).encodedLength ();
453468
454469 generateGroupEncoderClassDeclaration (
455470 sb ,
456- groupToken ,
457471 groupName ,
458472 parentMessageClassName ,
459473 findSubGroupNames (subGroupTokens ),
@@ -549,7 +563,6 @@ private static String primitiveTypeName(final Token token)
549563
550564 private void generateGroupDecoderClassDeclaration (
551565 final StringBuilder sb ,
552- final Token groupToken ,
553566 final String groupName ,
554567 final String parentMessageClassName ,
555568 final List <String > subGroupNames ,
@@ -558,7 +571,6 @@ private void generateGroupDecoderClassDeclaration(
558571 {
559572 final String className = formatClassName (groupName );
560573
561- generateTypeJavadoc (sb , indent , groupToken );
562574 new Formatter (sb ).format ("\n " +
563575 indent + "public static class %1$s\n " +
564576 indent + " implements Iterable<%1$s>, java.util.Iterator<%1$s>\n " +
@@ -603,7 +615,6 @@ private void generateGroupDecoderClassDeclaration(
603615
604616 private void generateGroupEncoderClassDeclaration (
605617 final StringBuilder sb ,
606- final Token groupToken ,
607618 final String groupName ,
608619 final String parentMessageClassName ,
609620 final List <String > subGroupNames ,
@@ -612,7 +623,6 @@ private void generateGroupEncoderClassDeclaration(
612623 {
613624 final String className = encoderName (groupName );
614625
615- generateTypeJavadoc (sb , indent , groupToken );
616626 new Formatter (sb ).format ("\n " +
617627 indent + "public static class %1$s\n " +
618628 indent + "{\n " +
@@ -1596,47 +1606,40 @@ private void generateAnnotations(
15961606 final String className ,
15971607 final List <Token > tokens ,
15981608 final Appendable out ,
1599- final int index ,
16001609 final Function <String , String > nameMapping ) throws IOException
16011610 {
1602- if (shouldGenerateGroupOrderAnnotation )
1603- {
1604- final List <String > groupClassNames = new ArrayList <>();
1605- int level = 0 ;
1606- int i = index ;
1611+ final List <String > groupClassNames = new ArrayList <>();
1612+ int level = 0 ;
16071613
1608- for (int size = tokens .size (); i < size ; i ++)
1614+ for (final Token token : tokens )
1615+ {
1616+ if (token .signal () == Signal .BEGIN_GROUP )
16091617 {
1610- if (tokens . get ( index ). signal () == Signal . BEGIN_GROUP )
1618+ if (1 == ++ level )
16111619 {
1612- if (++level == 1 )
1613- {
1614- final Token groupToken = tokens .get (index );
1615- final String groupName = groupToken .name ();
1616- groupClassNames .add (formatClassName (nameMapping .apply (groupName )));
1617- }
1618- }
1619- else if (tokens .get (index ).signal () == Signal .END_GROUP && --level < 0 )
1620- {
1621- break ;
1620+ groupClassNames .add (formatClassName (nameMapping .apply (token .name ())));
16221621 }
16231622 }
1623+ else if (token .signal () == Signal .END_GROUP )
1624+ {
1625+ --level ;
1626+ }
1627+ }
16241628
1625- if (!groupClassNames .isEmpty ())
1629+ if (!groupClassNames .isEmpty ())
1630+ {
1631+ out .append (indent ).append ("@uk.co.real_logic.sbe.codec.java.GroupOrder({\n " );
1632+ int i = 0 ;
1633+ for (final String name : groupClassNames )
16261634 {
1627- out .append (indent ).append ("@uk.co.real_logic.sbe.codec.java.GroupOrder({" );
1628- i = 0 ;
1629- for (final String name : groupClassNames )
1635+ out .append (indent ).append (INDENT ).append (className ).append ('.' ).append (name ).append (".class" );
1636+ if (++i < groupClassNames .size ())
16301637 {
1631- out .append (className ).append ('.' ).append (name ).append (".class" );
1632- if (++i < groupClassNames .size ())
1633- {
1634- out .append (", " );
1635- }
1638+ out .append (",\n " );
16361639 }
1637-
1638- out .append ("})\n " );
16391640 }
1641+
1642+ out .append ("})" );
16401643 }
16411644 }
16421645
0 commit comments