@@ -187,7 +187,7 @@ private void generateEncoder(
187187 generateEncoderGroups (sb , className , groups , 0 , indent );
188188 out .append (sb );
189189
190-  out .append (generateVarDataEncoders (className , varData , indent ));
190+  out .append (generateDataEncoders (className , varData , indent ));
191191 out .append ("}\n " );
192192 }
193193 }
@@ -215,6 +215,7 @@ private void generateDecoder(
215215 out .append (sb );
216216
217217 out .append (generateDataDecoders (dataFields , BASE_INDENT ));
218+ 
218219 out .append ("}\n " );
219220 }
220221 }
@@ -246,6 +247,10 @@ private int generateDecoderGroups(
246247 index  = generateDecoderGroups (sb , parentMessageClassName , tokens , index , indent  + INDENT );
247248 }
248249
250+  final  List <Token > dataFields  = new  ArrayList <>();
251+  collectDataFields (tokens , index , dataFields );
252+  sb .append (generateDataDecoders (dataFields , indent  + INDENT ));
253+ 
249254 sb .append (indent ).append (" }\n " );
250255 }
251256 }
@@ -281,6 +286,10 @@ private int generateEncoderGroups(
281286 index  = generateEncoderGroups (sb , parentMessageClassName , tokens , index , indent  + INDENT );
282287 }
283288
289+  final  List <Token > dataFields  = new  ArrayList <>();
290+  collectDataFields (tokens , index , dataFields );
291+  sb .append (generateDataEncoders (groupClassName , dataFields , indent  + INDENT ));
292+ 
284293 sb .append (indent ).append (" }\n " );
285294 }
286295 }
@@ -619,7 +628,7 @@ private CharSequence generateDataDecoders(final List<Token> tokens, final String
619628 indent  + " public int %sLength()\n "  +
620629 indent  + " {\n "  +
621630 indent  + "%s"  +
622-  indent  + " final int limit = limit();\n "  +
631+  indent  + " final int limit = parentMessage. limit();\n "  +
623632 indent  + " return CodecUtil.%sGet(buffer, limit%s);\n "  +
624633 indent  + " }\n " ,
625634 toLowerFirstChar (propertyName ),
@@ -635,7 +644,7 @@ private CharSequence generateDataDecoders(final List<Token> tokens, final String
635644 return  sb ;
636645 }
637646
638-  private  CharSequence  generateVarDataEncoders (final  String  className , final  List <Token > tokens , final  String  indent )
647+  private  CharSequence  generateDataEncoders (final  String  className , final  List <Token > tokens , final  String  indent )
639648 {
640649 final  StringBuilder  sb  = new  StringBuilder ();
641650
@@ -709,11 +718,11 @@ private void generateDataDecodeMethods(
709718 "\n "  +
710719 indent  + " public String %1$s()\n "  +
711720 indent  + " {\n "  +
712-  indent  +  "%2$s"  +
721+     "%2$s"  +
713722 indent  + " final int sizeOfLengthField = %3$d;\n "  +
714-  indent  + " final int limit = limit();\n "  +
723+  indent  + " final int limit = parentMessage. limit();\n "  +
715724 indent  + " final int dataLength = CodecUtil.%4$sGet(buffer, limit%5$s);\n "  +
716-  indent  + " limit(limit + sizeOfLengthField + dataLength);\n "  +
725+  indent  + " parentMessage. limit(limit + sizeOfLengthField + dataLength);\n "  +
717726 indent  + " final byte[] tmp = new byte[dataLength];\n "  +
718727 indent  + " buffer.getBytes(limit + sizeOfLengthField, tmp, 0, dataLength);\n \n "  +
719728 indent  + " final String value;\n "  +
@@ -728,7 +737,7 @@ private void generateDataDecodeMethods(
728737 indent  + " return value;\n "  +
729738 indent  + " }\n " ,
730739 toLowerFirstChar (propertyName ),
731-  generateStringNotPresentCondition (token .version (), BASE_INDENT ),
740+  generateStringNotPresentCondition (token .version (), indent ),
732741 sizeOfLengthField ,
733742 lengthTypePrefix ,
734743 byteOrderStr ,
@@ -782,8 +791,8 @@ private void generateDataEncodeMethods(
782791 indent  + " }\n \n "  +
783792 indent  + " final int length = bytes.length;\n "  +
784793 indent  + " final int sizeOfLengthField = %3$d;\n "  +
785-  indent  + " final int limit = limit();\n "  +
786-  indent  + " limit(limit + sizeOfLengthField + length);\n "  +
794+  indent  + " final int limit = parentMessage. limit();\n "  +
795+  indent  + " parentMessage. limit(limit + sizeOfLengthField + length);\n "  +
787796 indent  + " CodecUtil.%4$sPut(buffer, limit, (%5$s)length%6$s);\n "  +
788797 indent  + " buffer.putBytes(limit + sizeOfLengthField, bytes, 0, length);\n \n "  +
789798 indent  + " return this;\n "  +
@@ -810,20 +819,21 @@ private void generateDataTypedDecoder(
810819 {
811820 sb .append (String .format (
812821 "\n "  +
813-  indent  + " public int get%s(final %s dst, final int dstOffset, final int length)\n "  +
822+  indent  + " public int get%s(\n "  +
823+  indent  + " final %s dst, final int dstOffset, final int length)\n "  +
814824 indent  + " {\n "  +
815-  indent  +  "%s"  +
825+     "%s"  +
816826 indent  + " final int sizeOfLengthField = %d;\n "  +
817-  indent  + " final int limit = limit();\n "  +
827+  indent  + " final int limit = parentMessage. limit();\n "  +
818828 indent  + " final int dataLength = CodecUtil.%sGet(buffer, limit%s);\n "  +
819829 indent  + " final int bytesCopied = Math.min(length, dataLength);\n "  +
820-  indent  + " limit(limit + sizeOfLengthField + dataLength);\n "  +
830+  indent  + " parentMessage. limit(limit + sizeOfLengthField + dataLength);\n "  +
821831 indent  + " buffer.getBytes(limit + sizeOfLengthField, dst, dstOffset, bytesCopied);\n \n "  +
822832 indent  + " return bytesCopied;\n "  +
823833 indent  + " }\n " ,
824834 propertyName ,
825835 exchangeType ,
826-  generateArrayFieldNotPresentCondition (token .version (), BASE_INDENT ),
836+  generateArrayFieldNotPresentCondition (token .version (), indent ),
827837 sizeOfLengthField ,
828838 lengthTypePrefix ,
829839 byteOrderStr 
@@ -842,11 +852,12 @@ private void generateDataTypedEncoder(
842852 {
843853 sb .append (String .format (
844854 "\n "  +
845-  indent  + " public int put%s(final %s src, final int srcOffset, final int length)\n "  +
855+  indent  + " public int put%s(\n "  +
856+  indent  + " final %s src, final int srcOffset, final int length)\n "  +
846857 indent  + " {\n "  +
847858 indent  + " final int sizeOfLengthField = %d;\n "  +
848-  indent  + " final int limit = limit();\n "  +
849-  indent  + " limit(limit + sizeOfLengthField + length);\n "  +
859+  indent  + " final int limit = parentMessage. limit();\n "  +
860+  indent  + " parentMessage. limit(limit + sizeOfLengthField + length);\n "  +
850861 indent  + " CodecUtil.%sPut(buffer, limit, (%s)length%s);\n "  +
851862 indent  + " buffer.putBytes(limit + sizeOfLengthField, src, srcOffset, length);\n \n "  +
852863 indent  + " return length;\n "  +
0 commit comments