@@ -770,33 +770,36 @@ private void generateDataDecodeMethods(
770770 byteOrderStr ,
771771 indent );
772772
773-  sb .append (String .format (
774-  "\n "  +
775-  indent  + " public String %1$s()\n "  +
776-  indent  + " {\n "  +
777-  "%2$s"  +
778-  indent  + " final int headerLength = %3$d;\n "  +
779-  indent  + " final int limit = parentMessage.limit();\n "  +
780-  indent  + " final int dataLength = (int)%4$s;\n "  +
781-  indent  + " parentMessage.limit(limit + headerLength + dataLength);\n "  +
782-  indent  + " final byte[] tmp = new byte[dataLength];\n "  +
783-  indent  + " buffer.getBytes(limit + headerLength, tmp, 0, dataLength);\n \n "  +
784-  indent  + " final String value;\n "  +
785-  indent  + " try\n "  +
786-  indent  + " {\n "  +
787-  indent  + " value = new String(tmp, \" %5$s\" );\n "  +
788-  indent  + " }\n "  +
789-  indent  + " catch (final java.io.UnsupportedEncodingException ex)\n "  +
790-  indent  + " {\n "  +
791-  indent  + " throw new RuntimeException(ex);\n "  +
792-  indent  + " }\n \n "  +
793-  indent  + " return value;\n "  +
794-  indent  + " }\n " ,
795-  formatPropertyName (propertyName ),
796-  generateStringNotPresentCondition (token .version (), indent ),
797-  sizeOfLengthField ,
798-  generateGet (lengthType , "limit" , byteOrderStr ),
799-  characterEncoding ));
773+  if  (null  != characterEncoding )
774+  {
775+  sb .append (String .format (
776+  "\n "  +
777+  indent  + " public String %1$s()\n "  +
778+  indent  + " {\n "  +
779+  "%2$s"  +
780+  indent  + " final int headerLength = %3$d;\n "  +
781+  indent  + " final int limit = parentMessage.limit();\n "  +
782+  indent  + " final int dataLength = (int)%4$s;\n "  +
783+  indent  + " parentMessage.limit(limit + headerLength + dataLength);\n "  +
784+  indent  + " final byte[] tmp = new byte[dataLength];\n "  +
785+  indent  + " buffer.getBytes(limit + headerLength, tmp, 0, dataLength);\n \n "  +
786+  indent  + " final String value;\n "  +
787+  indent  + " try\n "  +
788+  indent  + " {\n "  +
789+  indent  + " value = new String(tmp, \" %5$s\" );\n "  +
790+  indent  + " }\n "  +
791+  indent  + " catch (final java.io.UnsupportedEncodingException ex)\n "  +
792+  indent  + " {\n "  +
793+  indent  + " throw new RuntimeException(ex);\n "  +
794+  indent  + " }\n \n "  +
795+  indent  + " return value;\n "  +
796+  indent  + " }\n " ,
797+  formatPropertyName (propertyName ),
798+  generateStringNotPresentCondition (token .version (), indent ),
799+  sizeOfLengthField ,
800+  generateGet (lengthType , "limit" , byteOrderStr ),
801+  characterEncoding ));
802+  }
800803 }
801804
802805 private  void  generateDataEncodeMethods (
@@ -832,37 +835,41 @@ private void generateDataEncodeMethods(
832835 byteOrderStr ,
833836 indent );
834837
835-  sb .append (String .format (
836-  "\n "  +
837-  indent  + " public %1$s %2$s(final String value)\n "  +
838-  indent  + " {\n "  +
839-  indent  + " final byte[] bytes;\n "  +
840-  indent  + " try\n "  +
841-  indent  + " {\n "  +
842-  indent  + " bytes = value.getBytes(\" %3$s\" );\n "  +
843-  indent  + " }\n "  +
844-  indent  + " catch (final java.io.UnsupportedEncodingException ex)\n "  +
845-  indent  + " {\n "  +
846-  indent  + " throw new RuntimeException(ex);\n "  +
847-  indent  + " }\n \n "  +
848-  indent  + " final int length = bytes.length;\n "  +
849-  indent  + " if (length > %4$d)\n "  +
850-  indent  + " {\n "  +
851-  indent  + " throw new IllegalArgumentException(\" length > max value for type: \"  + length);\n "  +
852-  indent  + " }\n \n "  +
853-  indent  + " final int headerLength = %5$d;\n "  +
854-  indent  + " final int limit = parentMessage.limit();\n "  +
855-  indent  + " parentMessage.limit(limit + headerLength + length);\n "  +
856-  indent  + " %6$s;\n "  +
857-  indent  + " buffer.putBytes(limit + headerLength, bytes, 0, length);\n \n "  +
858-  indent  + " return this;\n "  +
859-  indent  + " }\n " ,
860-  className ,
861-  formatPropertyName (propertyName ),
862-  characterEncoding ,
863-  maxLengthValue ,
864-  sizeOfLengthField ,
865-  generatePut (lengthType , "limit" , "length" , byteOrderStr )));
838+  if  (null  != characterEncoding )
839+  {
840+  sb .append (String .format (
841+  "\n "  +
842+  indent  + " public %1$s %2$s(final String value)\n "  +
843+  indent  + " {\n "  +
844+  indent  + " final byte[] bytes;\n "  +
845+  indent  + " try\n "  +
846+  indent  + " {\n "  +
847+  indent  + " bytes = value.getBytes(\" %3$s\" );\n "  +
848+  indent  + " }\n "  +
849+  indent  + " catch (final java.io.UnsupportedEncodingException ex)\n "  +
850+  indent  + " {\n "  +
851+  indent  + " throw new RuntimeException(ex);\n "  +
852+  indent  + " }\n \n "  +
853+  indent  + " final int length = bytes.length;\n "  +
854+  indent  + " if (length > %4$d)\n "  +
855+  indent  + " {\n "  +
856+  indent  + " throw new IllegalArgumentException("  +
857+  "\" length > max value for type: \"  + length);\n "  +
858+  indent  + " }\n \n "  +
859+  indent  + " final int headerLength = %5$d;\n "  +
860+  indent  + " final int limit = parentMessage.limit();\n "  +
861+  indent  + " parentMessage.limit(limit + headerLength + length);\n "  +
862+  indent  + " %6$s;\n "  +
863+  indent  + " buffer.putBytes(limit + headerLength, bytes, 0, length);\n \n "  +
864+  indent  + " return this;\n "  +
865+  indent  + " }\n " ,
866+  className ,
867+  formatPropertyName (propertyName ),
868+  characterEncoding ,
869+  maxLengthValue ,
870+  sizeOfLengthField ,
871+  generatePut (lengthType , "limit" , "length" , byteOrderStr )));
872+  }
866873 }
867874
868875 private  void  generateDataTypedDecoder (
@@ -1787,16 +1794,19 @@ private static int sizeOfPrimitive(final Encoding encoding)
17871794 }
17881795
17891796 private  static  void  generateCharacterEncodingMethod (
1790-  final  StringBuilder  sb , final  String  propertyName , final  String  encoding , final  String  indent )
1797+  final  StringBuilder  sb , final  String  propertyName , final  String  characterEncoding , final  String  indent )
17911798 {
1792-  sb .append (String .format (
1793-  "\n "  +
1794-  indent  + " public static String %sCharacterEncoding()\n "  +
1795-  indent  + " {\n "  +
1796-  indent  + " return \" %s\" ;\n "  +
1797-  indent  + " }\n " ,
1798-  formatPropertyName (propertyName ),
1799-  encoding ));
1799+  if  (null  != characterEncoding )
1800+  {
1801+  sb .append (String .format (
1802+  "\n "  +
1803+  indent  + " public static String %sCharacterEncoding()\n "  +
1804+  indent  + " {\n "  +
1805+  indent  + " return \" %s\" ;\n "  +
1806+  indent  + " }\n " ,
1807+  formatPropertyName (propertyName ),
1808+  characterEncoding ));
1809+  }
18001810 }
18011811
18021812 private  CharSequence  generateConstPropertyMethods (
@@ -2791,9 +2801,17 @@ private StringBuilder appendDecoderDisplay(
27912801
27922802 append (sb , indent , "//"  + varDataToken );
27932803
2804+  final  String  characterEncoding  = varData .get (i  + 3 ).encoding ().characterEncoding ();
27942805 final  String  varDataName  = formatPropertyName (varDataToken .name ());
27952806 append (sb , indent , "builder.append(\" "  + varDataName  + Separators .KEY_VALUE  + "\" );" );
2796-  append (sb , indent , "builder.append("  + varDataName  + "());" );
2807+  if  (null  == characterEncoding )
2808+  {
2809+  append (sb , indent , "builder.append("  + varDataName  + "Length() + \"  raw bytes\" );" );
2810+  }
2811+  else 
2812+  {
2813+  append (sb , indent , "builder.append("  + varDataName  + "());" );
2814+  }
27972815
27982816 lengthBeforeLastGeneratedSeparator  = sb .length ();
27992817 Separators .FIELD .appendToGeneratedBuilder (sb , indent , "builder" );
0 commit comments