@@ -1101,12 +1101,13 @@ private void generateComposite(final List<Token> tokens) throws IOException
11011101 final StringBuilder sb = new StringBuilder ();
11021102 generateEncodingOffsetMethod (sb , propertyName , encodingToken .offset (), BASE_INDENT );
11031103 generateEncodingLengthMethod (sb , propertyName , encodingToken .encodedLength (), BASE_INDENT );
1104+ generateFieldSinceVersionMethod (sb , encodingToken , BASE_INDENT );
11041105
11051106 switch (encodingToken .signal ())
11061107 {
11071108 case ENCODING :
11081109 out .append (sb ).append (generatePrimitiveDecoder (
1109- true , encodingToken .name (), encodingToken , BASE_INDENT ));
1110+ true , encodingToken .name (), encodingToken , encodingToken , BASE_INDENT ));
11101111 break ;
11111112
11121113 case BEGIN_ENUM :
@@ -1524,19 +1525,24 @@ private static CharSequence generateEnumDeclaration(final String name, final Tok
15241525 }
15251526
15261527 private CharSequence generatePrimitiveDecoder (
1527- final boolean inComposite , final String propertyName , final Token token , final String indent )
1528+ final boolean inComposite ,
1529+ final String propertyName ,
1530+ final Token propertyToken ,
1531+ final Token encodingToken ,
1532+ final String indent )
15281533 {
15291534 final StringBuilder sb = new StringBuilder ();
15301535
1531- sb .append (generatePrimitiveFieldMetaData (propertyName , token , indent ));
1536+ sb .append (generatePrimitiveFieldMetaData (propertyName , encodingToken , indent ));
15321537
1533- if (token .isConstantEncoding ())
1538+ if (encodingToken .isConstantEncoding ())
15341539 {
1535- sb .append (generateConstPropertyMethods (propertyName , token , indent ));
1540+ sb .append (generateConstPropertyMethods (propertyName , encodingToken , indent ));
15361541 }
15371542 else
15381543 {
1539- sb .append (generatePrimitivePropertyDecodeMethods (inComposite , propertyName , token , indent ));
1544+ sb .append (generatePrimitivePropertyDecodeMethods (
1545+ inComposite , propertyName , propertyToken , encodingToken , indent ));
15401546 }
15411547
15421548 return sb ;
@@ -1562,11 +1568,16 @@ private CharSequence generatePrimitiveEncoder(
15621568 }
15631569
15641570 private CharSequence generatePrimitivePropertyDecodeMethods (
1565- final boolean inComposite , final String propertyName , final Token token , final String indent )
1571+ final boolean inComposite ,
1572+ final String propertyName ,
1573+ final Token propertyToken ,
1574+ final Token encodingToken ,
1575+ final String indent )
15661576 {
1567- return token .matchOnLength (
1568- () -> generatePrimitivePropertyDecode (inComposite , propertyName , token , indent ),
1569- () -> generatePrimitiveArrayPropertyDecode (inComposite , propertyName , token , indent ));
1577+ return encodingToken .matchOnLength (
1578+ () -> generatePrimitivePropertyDecode (inComposite , propertyName , propertyToken , encodingToken , indent ),
1579+ () -> generatePrimitiveArrayPropertyDecode (
1580+ inComposite , propertyName , propertyToken , encodingToken , indent ));
15701581 }
15711582
15721583 private CharSequence generatePrimitivePropertyEncodeMethods (
@@ -1617,12 +1628,16 @@ private CharSequence generatePrimitiveFieldMetaData(
16171628 }
16181629
16191630 private CharSequence generatePrimitivePropertyDecode (
1620- final boolean inComposite , final String propertyName , final Token token , final String indent )
1631+ final boolean inComposite ,
1632+ final String propertyName ,
1633+ final Token propertyToken ,
1634+ final Token encodingToken ,
1635+ final String indent )
16211636 {
1622- final Encoding encoding = token .encoding ();
1637+ final Encoding encoding = encodingToken .encoding ();
16231638 final String javaTypeName = javaTypeName (encoding .primitiveType ());
16241639
1625- final int offset = token .offset ();
1640+ final int offset = encodingToken .offset ();
16261641 final String byteOrderStr = byteOrderString (encoding );
16271642
16281643 return String .format (
@@ -1634,7 +1649,7 @@ private CharSequence generatePrimitivePropertyDecode(
16341649 indent + " }\n \n " ,
16351650 javaTypeName ,
16361651 propertyName ,
1637- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1652+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
16381653 generateGet (encoding .primitiveType (), "offset + " + offset , byteOrderStr ));
16391654 }
16401655
@@ -1723,13 +1738,17 @@ private static CharSequence generatePropertyNotPresentCondition(
17231738 }
17241739
17251740 private CharSequence generatePrimitiveArrayPropertyDecode (
1726- final boolean inComposite , final String propertyName , final Token token , final String indent )
1741+ final boolean inComposite ,
1742+ final String propertyName ,
1743+ final Token propertyToken ,
1744+ final Token encodingToken ,
1745+ final String indent )
17271746 {
1728- final Encoding encoding = token .encoding ();
1747+ final Encoding encoding = encodingToken .encoding ();
17291748 final String javaTypeName = javaTypeName (encoding .primitiveType ());
1730- final int offset = token .offset ();
1749+ final int offset = encodingToken .offset ();
17311750 final String byteOrderStr = byteOrderString (encoding );
1732- final int fieldLength = token .arrayLength ();
1751+ final int fieldLength = encodingToken .arrayLength ();
17331752 final int typeSize = sizeOfPrimitive (encoding );
17341753
17351754 final StringBuilder sb = new StringBuilder ();
@@ -1750,7 +1769,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17501769 javaTypeName ,
17511770 propertyName ,
17521771 fieldLength ,
1753- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1772+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
17541773 offset ,
17551774 typeSize ,
17561775 generateGet (encoding .primitiveType (), "pos" , byteOrderStr )));
@@ -1774,7 +1793,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17741793 indent + " }\n " ,
17751794 Generators .toUpperFirstChar (propertyName ),
17761795 fieldLength ,
1777- generateArrayFieldNotPresentCondition (token .version (), indent ),
1796+ generateArrayFieldNotPresentCondition (propertyToken .version (), indent ),
17781797 offset ));
17791798
17801799 sb .append (String .format ("\n " +
@@ -1788,7 +1807,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17881807 indent + " return new String(dst, 0, end, %s);\n " +
17891808 indent + " }\n \n " ,
17901809 formatPropertyName (propertyName ),
1791- generateStringNotPresentCondition (token .version (), indent ),
1810+ generateStringNotPresentCondition (propertyToken .version (), indent ),
17921811 fieldLength , offset ,
17931812 fieldLength , fieldLength ,
17941813 charset (encoding .characterEncoding ())));
@@ -2332,7 +2351,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
23322351 switch (typeToken .signal ())
23332352 {
23342353 case ENCODING :
2335- sb .append (generatePrimitiveDecoder (false , propertyName , typeToken , indent ));
2354+ sb .append (generatePrimitiveDecoder (false , propertyName , fieldToken , typeToken , indent ));
23362355 break ;
23372356
23382357 case BEGIN_ENUM :
@@ -2464,7 +2483,7 @@ private CharSequence generateEnumDecoder(
24642483 indent + " }\n \n " ,
24652484 enumName ,
24662485 propertyName ,
2467- generatePropertyNotPresentCondition (inComposite , DECODER , token .version (), indent ),
2486+ generatePropertyNotPresentCondition (inComposite , DECODER , signalToken .version (), indent ),
24682487 enumName ,
24692488 generateGet (encoding .primitiveType (), "offset + " + token .offset (), byteOrderString (encoding )));
24702489 }
@@ -2522,7 +2541,7 @@ private CharSequence generateBitSetProperty(
25222541 generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , bitSetName ),
25232542 bitSetName ,
25242543 propertyName ,
2525- generatePropertyNotPresentCondition (inComposite , codecType , bitsetToken .version (), indent ),
2544+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
25262545 propertyName ,
25272546 bitsetToken .offset (),
25282547 propertyName ));
@@ -2558,7 +2577,7 @@ private CharSequence generateCompositeProperty(
25582577 generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , compositeName ),
25592578 compositeName ,
25602579 propertyName ,
2561- generatePropertyNotPresentCondition (inComposite , codecType , compositeToken .version (), indent ),
2580+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
25622581 propertyName ,
25632582 compositeToken .offset (),
25642583 propertyName ));
0 commit comments