@@ -99,18 +99,20 @@ public void generate() throws IOException
9999 try  (final  Writer  out  = outputManager .createOutput (className ))
100100 {
101101 out .append (generateFileHeader (ir .applicableNamespace ()));
102-  out .append (generateClassDeclaration (className ));
103-  out .append (generateMessageFlyweightCode (className , msgToken ));
104- 
105102 final  List <Token > messageBody  = tokens .subList (1 , tokens .size () - 1 );
106103 int  offset  = 0 ;
107104
108105 final  List <Token > rootFields  = new  ArrayList <>();
109106 offset  = collectRootFields (messageBody , offset , rootFields );
110-  out .append (generateFields (className , rootFields , BASE_INDENT ));
111- 
112107 final  List <Token > groups  = new  ArrayList <>();
113108 offset  = collectGroups (messageBody , offset , groups );
109+ 
110+  generateAnnotations (className , groups , out );
111+  out .append (generateClassDeclaration (className ));
112+  out .append (generateMessageFlyweightCode (className , msgToken ));
113+ 
114+  out .append (generateFields (className , rootFields , BASE_INDENT ));
115+ 
114116 final  StringBuilder  sb  = new  StringBuilder ();
115117 generateGroups (sb , className , groups , 0 , BASE_INDENT );
116118 out .append (sb );
@@ -662,6 +664,37 @@ private CharSequence generateEnumFileHeader(final String packageName)
662664 );
663665 }
664666
667+  private  void  generateAnnotations (String  className , final  List <Token > tokens , Writer  out ) throws  IOException 
668+  {
669+  int  index  = 0 ;
670+  final  List <String > groupClassNames  = new  ArrayList <>();
671+  for  (int  size  = tokens .size (); index  < size ; index ++)
672+  {
673+  if  (tokens .get (index ).signal () == Signal .BEGIN_GROUP )
674+  {
675+  final  Token  groupToken  = tokens .get (index );
676+  final  String  groupName  = groupToken .name ();
677+  groupClassNames .add (formatClassName (groupName ));
678+  }
679+  }
680+  if  (groupClassNames .isEmpty ())
681+  {
682+  return ;
683+  }
684+  out .append ("@GroupOrder({" );
685+  index  = 0 ;
686+  for  (String  name  : groupClassNames )
687+  {
688+  out .append (className ).append ('.' ).append (name ).append (".class" );
689+  if  (++index  < groupClassNames .size ())
690+  {
691+  out .append (", " );
692+  }
693+  }
694+ 
695+  out .append ("})\n " );
696+  }
697+ 
665698 private  CharSequence  generateClassDeclaration (final  String  className )
666699 {
667700 return  String .format (
0 commit comments