@@ -170,9 +170,9 @@ private void generateEncoder(final List<Token> groups,
170170
171171 final StringBuilder sb = new StringBuilder ();
172172 generateGroups (sb , className , groups , 0 , BASE_INDENT );
173-
174- out .append (generateVarData (varData ));
175173 out .append (sb );
174+
175+ out .append (generateVarDataEncoders (varData ));
176176 out .append ("}\n " );
177177 }
178178 }
@@ -198,6 +198,7 @@ private void generateDecoder(final List<Token> groups,
198198
199199 out.append(sb);*/
200200
201+ out .append (generateVarDataDecoders (varData ));
201202 out .append ("}\n " );
202203 }
203204 }
@@ -463,7 +464,7 @@ private CharSequence generateGroupProperty(final String groupName, final Token t
463464 return sb ;
464465 }
465466
466- private CharSequence generateVarData (final List <Token > tokens )
467+ private CharSequence generateVarDataDecoders (final List <Token > tokens )
467468 {
468469 final StringBuilder sb = new StringBuilder ();
469470
@@ -515,40 +516,65 @@ private CharSequence generateVarData(final List<Token> tokens)
515516 byteOrderStr
516517 ));
517518
518- generateVarDataAccessMethods (
519- sb , token , propertyName , sizeOfLengthField , lengthJavaType , lengthTypePrefix , byteOrderStr , characterEncoding );
519+ generateVarDataDecodeMethods (
520+ sb , token , propertyName , sizeOfLengthField , lengthTypePrefix , byteOrderStr , characterEncoding );
520521 }
521522
522523 return sb ;
523524 }
524525
525- private void generateVarDataAccessMethods (
526+ private CharSequence generateVarDataEncoders (final List <Token > tokens )
527+ {
528+ final StringBuilder sb = new StringBuilder ();
529+
530+ for (int i = 0 , size = tokens .size (); i < size ; i ++)
531+ {
532+ final Token token = tokens .get (i );
533+ if (token .signal () != Signal .BEGIN_VAR_DATA )
534+ {
535+ continue ;
536+ }
537+
538+ final String characterEncoding = tokens .get (i + 3 ).encoding ().characterEncoding ();
539+ final String propertyName = toUpperFirstChar (token .name ());
540+ final Token lengthToken = tokens .get (i + 2 );
541+ final int sizeOfLengthField = lengthToken .size ();
542+ final Encoding lengthEncoding = lengthToken .encoding ();
543+ final String lengthJavaType = javaTypeName (lengthEncoding .primitiveType ());
544+ final String lengthTypePrefix = lengthEncoding .primitiveType ().primitiveName ();
545+ final String byteOrderStr = byteOrderString (lengthEncoding );
546+
547+ generateVarDataEncodeMethods (
548+ sb , propertyName , sizeOfLengthField , lengthJavaType , lengthTypePrefix , byteOrderStr , characterEncoding );
549+ }
550+
551+ return sb ;
552+ }
553+
554+ private void generateVarDataDecodeMethods (
526555 final StringBuilder sb ,
527556 final Token token ,
528557 final String propertyName ,
529558 final int sizeOfLengthField ,
530- final String lengthJavaType ,
531559 final String lengthTypePrefix ,
532560 final String byteOrderStr ,
533561 final String characterEncoding )
534562 {
535- generateVarDataTypedAccessors (
563+ generateVarDataTypedDecoder (
536564 sb ,
537565 token ,
538566 propertyName ,
539567 sizeOfLengthField ,
540568 fullMutableBufferImplementation ,
541- lengthJavaType ,
542569 lengthTypePrefix ,
543570 byteOrderStr );
544571
545- generateVarDataTypedAccessors (
572+ generateVarDataTypedDecoder (
546573 sb ,
547574 token ,
548575 propertyName ,
549576 sizeOfLengthField ,
550577 "byte[]" ,
551- lengthJavaType ,
552578 lengthTypePrefix ,
553579 byteOrderStr );
554580
@@ -582,6 +608,34 @@ private void generateVarDataAccessMethods(
582608 byteOrderStr ,
583609 characterEncoding
584610 ));
611+ }
612+
613+ private void generateVarDataEncodeMethods (
614+ final StringBuilder sb ,
615+ final String propertyName ,
616+ final int sizeOfLengthField ,
617+ final String lengthJavaType ,
618+ final String lengthTypePrefix ,
619+ final String byteOrderStr ,
620+ final String characterEncoding )
621+ {
622+ generateVarDataTypedEncoder (
623+ sb ,
624+ propertyName ,
625+ sizeOfLengthField ,
626+ fullMutableBufferImplementation ,
627+ lengthJavaType ,
628+ lengthTypePrefix ,
629+ byteOrderStr );
630+
631+ generateVarDataTypedEncoder (
632+ sb ,
633+ propertyName ,
634+ sizeOfLengthField ,
635+ "byte[]" ,
636+ lengthJavaType ,
637+ lengthTypePrefix ,
638+ byteOrderStr );
585639
586640 sb .append (String .format (
587641 "\n " +
@@ -612,13 +666,12 @@ private void generateVarDataAccessMethods(
612666 ));
613667 }
614668
615- private void generateVarDataTypedAccessors (
669+ private void generateVarDataTypedDecoder (
616670 final StringBuilder sb ,
617671 final Token token ,
618672 final String propertyName ,
619673 final int sizeOfLengthField ,
620674 final String exchangeType ,
621- final String lengthJavaType ,
622675 final String lengthTypePrefix ,
623676 final String byteOrderStr )
624677 {
@@ -643,7 +696,17 @@ private void generateVarDataTypedAccessors(
643696 lengthTypePrefix ,
644697 byteOrderStr
645698 ));
699+ }
646700
701+ private void generateVarDataTypedEncoder (
702+ final StringBuilder sb ,
703+ final String propertyName ,
704+ final int sizeOfLengthField ,
705+ final String exchangeType ,
706+ final String lengthJavaType ,
707+ final String lengthTypePrefix ,
708+ final String byteOrderStr )
709+ {
647710 sb .append (String .format (
648711 "\n " +
649712 " public int put%s(final %s src, final int srcOffset, final int length)\n " +
0 commit comments