@@ -1054,12 +1054,13 @@ private void generateComposite(final List<Token> tokens) throws IOException
10541054 final StringBuilder sb = new StringBuilder ();
10551055 generateEncodingOffsetMethod (sb , propertyName , encodingToken .offset (), BASE_INDENT );
10561056 generateEncodingLengthMethod (sb , propertyName , encodingToken .encodedLength (), BASE_INDENT );
1057+ generateFieldSinceVersionMethod (sb , encodingToken , BASE_INDENT );
10571058
10581059 switch (encodingToken .signal ())
10591060 {
10601061 case ENCODING :
10611062 out .append (sb ).append (generatePrimitiveDecoder (
1062- true , encodingToken .name (), encodingToken , BASE_INDENT ));
1063+ true , encodingToken .name (), encodingToken , encodingToken , BASE_INDENT ));
10631064 break ;
10641065
10651066 case BEGIN_ENUM :
@@ -1477,19 +1478,24 @@ private static CharSequence generateEnumDeclaration(final String name, final Tok
14771478 }
14781479
14791480 private CharSequence generatePrimitiveDecoder (
1480- final boolean inComposite , final String propertyName , final Token token , final String indent )
1481+ final boolean inComposite ,
1482+ final String propertyName ,
1483+ final Token propertyToken ,
1484+ final Token encodingToken ,
1485+ final String indent )
14811486 {
14821487 final StringBuilder sb = new StringBuilder ();
14831488
1484- sb .append (generatePrimitiveFieldMetaData (propertyName , token , indent ));
1489+ sb .append (generatePrimitiveFieldMetaData (propertyName , encodingToken , indent ));
14851490
1486- if (token .isConstantEncoding ())
1491+ if (encodingToken .isConstantEncoding ())
14871492 {
1488- sb .append (generateConstPropertyMethods (propertyName , token , indent ));
1493+ sb .append (generateConstPropertyMethods (propertyName , encodingToken , indent ));
14891494 }
14901495 else
14911496 {
1492- sb .append (generatePrimitivePropertyDecodeMethods (inComposite , propertyName , token , indent ));
1497+ sb .append (generatePrimitivePropertyDecodeMethods (
1498+ inComposite , propertyName , propertyToken , encodingToken , indent ));
14931499 }
14941500
14951501 return sb ;
@@ -1515,11 +1521,16 @@ private CharSequence generatePrimitiveEncoder(
15151521 }
15161522
15171523 private CharSequence generatePrimitivePropertyDecodeMethods (
1518- final boolean inComposite , final String propertyName , final Token token , final String indent )
1524+ final boolean inComposite ,
1525+ final String propertyName ,
1526+ final Token propertyToken ,
1527+ final Token encodingToken ,
1528+ final String indent )
15191529 {
1520- return token .matchOnLength (
1521- () -> generatePrimitivePropertyDecode (inComposite , propertyName , token , indent ),
1522- () -> generatePrimitiveArrayPropertyDecode (inComposite , propertyName , token , indent ));
1530+ return encodingToken .matchOnLength (
1531+ () -> generatePrimitivePropertyDecode (inComposite , propertyName , propertyToken , encodingToken , indent ),
1532+ () -> generatePrimitiveArrayPropertyDecode (
1533+ inComposite , propertyName , propertyToken , encodingToken , indent ));
15231534 }
15241535
15251536 private CharSequence generatePrimitivePropertyEncodeMethods (
@@ -1570,12 +1581,16 @@ private CharSequence generatePrimitiveFieldMetaData(
15701581 }
15711582
15721583 private CharSequence generatePrimitivePropertyDecode (
1573- final boolean inComposite , final String propertyName , final Token token , final String indent )
1584+ final boolean inComposite ,
1585+ final String propertyName ,
1586+ final Token propertyToken ,
1587+ final Token encodingToken ,
1588+ final String indent )
15741589 {
1575- final Encoding encoding = token .encoding ();
1590+ final Encoding encoding = encodingToken .encoding ();
15761591 final String javaTypeName = javaTypeName (encoding .primitiveType ());
15771592
1578- final int offset = token .offset ();
1593+ final int offset = encodingToken .offset ();
15791594 final String byteOrderStr = byteOrderString (encoding );
15801595
15811596 return String .format (
@@ -1587,7 +1602,7 @@ private CharSequence generatePrimitivePropertyDecode(
15871602 indent + " }\n \n " ,
15881603 javaTypeName ,
15891604 propertyName ,
1590- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1605+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
15911606 generateGet (encoding .primitiveType (), "offset + " + offset , byteOrderStr ));
15921607 }
15931608
@@ -1676,13 +1691,17 @@ private static CharSequence generatePropertyNotPresentCondition(
16761691 }
16771692
16781693 private CharSequence generatePrimitiveArrayPropertyDecode (
1679- final boolean inComposite , final String propertyName , final Token token , final String indent )
1694+ final boolean inComposite ,
1695+ final String propertyName ,
1696+ final Token propertyToken ,
1697+ final Token encodingToken ,
1698+ final String indent )
16801699 {
1681- final Encoding encoding = token .encoding ();
1700+ final Encoding encoding = encodingToken .encoding ();
16821701 final String javaTypeName = javaTypeName (encoding .primitiveType ());
1683- final int offset = token .offset ();
1702+ final int offset = encodingToken .offset ();
16841703 final String byteOrderStr = byteOrderString (encoding );
1685- final int fieldLength = token .arrayLength ();
1704+ final int fieldLength = encodingToken .arrayLength ();
16861705 final int typeSize = sizeOfPrimitive (encoding );
16871706
16881707 final StringBuilder sb = new StringBuilder ();
@@ -1703,7 +1722,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17031722 javaTypeName ,
17041723 propertyName ,
17051724 fieldLength ,
1706- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1725+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
17071726 offset ,
17081727 typeSize ,
17091728 generateGet (encoding .primitiveType (), "pos" , byteOrderStr )));
@@ -1727,7 +1746,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17271746 indent + " }\n " ,
17281747 Generators .toUpperFirstChar (propertyName ),
17291748 fieldLength ,
1730- generateArrayFieldNotPresentCondition (token .version (), indent ),
1749+ generateArrayFieldNotPresentCondition (propertyToken .version (), indent ),
17311750 offset ));
17321751
17331752 sb .append (String .format ("\n " +
@@ -1741,7 +1760,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17411760 indent + " return new String(dst, 0, end, %s);\n " +
17421761 indent + " }\n \n " ,
17431762 formatPropertyName (propertyName ),
1744- generateStringNotPresentCondition (token .version (), indent ),
1763+ generateStringNotPresentCondition (propertyToken .version (), indent ),
17451764 fieldLength , offset ,
17461765 fieldLength , fieldLength ,
17471766 charset (encoding .characterEncoding ())));
@@ -2259,7 +2278,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
22592278 switch (typeToken .signal ())
22602279 {
22612280 case ENCODING :
2262- sb .append (generatePrimitiveDecoder (false , propertyName , typeToken , indent ));
2281+ sb .append (generatePrimitiveDecoder (false , propertyName , fieldToken , typeToken , indent ));
22632282 break ;
22642283
22652284 case BEGIN_ENUM :
@@ -2485,7 +2504,7 @@ private CharSequence generateCompositeProperty(
24852504 generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , compositeName ),
24862505 compositeName ,
24872506 propertyName ,
2488- generatePropertyNotPresentCondition (inComposite , codecType , compositeToken .version (), indent ),
2507+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
24892508 propertyName ,
24902509 compositeToken .offset (),
24912510 propertyName ));
0 commit comments