@@ -1101,12 +1101,13 @@ private void generateComposite(final List<Token> tokens) throws IOException
1101
1101
final StringBuilder sb = new StringBuilder ();
1102
1102
generateEncodingOffsetMethod (sb , propertyName , encodingToken .offset (), BASE_INDENT );
1103
1103
generateEncodingLengthMethod (sb , propertyName , encodingToken .encodedLength (), BASE_INDENT );
1104
+ generateFieldSinceVersionMethod (sb , encodingToken , BASE_INDENT );
1104
1105
1105
1106
switch (encodingToken .signal ())
1106
1107
{
1107
1108
case ENCODING :
1108
1109
out .append (sb ).append (generatePrimitiveDecoder (
1109
- true , encodingToken .name (), encodingToken , BASE_INDENT ));
1110
+ true , encodingToken .name (), encodingToken , encodingToken , BASE_INDENT ));
1110
1111
break ;
1111
1112
1112
1113
case BEGIN_ENUM :
@@ -1524,19 +1525,24 @@ private static CharSequence generateEnumDeclaration(final String name, final Tok
1524
1525
}
1525
1526
1526
1527
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 )
1528
1533
{
1529
1534
final StringBuilder sb = new StringBuilder ();
1530
1535
1531
- sb .append (generatePrimitiveFieldMetaData (propertyName , token , indent ));
1536
+ sb .append (generatePrimitiveFieldMetaData (propertyName , encodingToken , indent ));
1532
1537
1533
- if (token .isConstantEncoding ())
1538
+ if (encodingToken .isConstantEncoding ())
1534
1539
{
1535
- sb .append (generateConstPropertyMethods (propertyName , token , indent ));
1540
+ sb .append (generateConstPropertyMethods (propertyName , encodingToken , indent ));
1536
1541
}
1537
1542
else
1538
1543
{
1539
- sb .append (generatePrimitivePropertyDecodeMethods (inComposite , propertyName , token , indent ));
1544
+ sb .append (generatePrimitivePropertyDecodeMethods (
1545
+ inComposite , propertyName , propertyToken , encodingToken , indent ));
1540
1546
}
1541
1547
1542
1548
return sb ;
@@ -1562,11 +1568,16 @@ private CharSequence generatePrimitiveEncoder(
1562
1568
}
1563
1569
1564
1570
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 )
1566
1576
{
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 ));
1570
1581
}
1571
1582
1572
1583
private CharSequence generatePrimitivePropertyEncodeMethods (
@@ -1617,12 +1628,16 @@ private CharSequence generatePrimitiveFieldMetaData(
1617
1628
}
1618
1629
1619
1630
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 )
1621
1636
{
1622
- final Encoding encoding = token .encoding ();
1637
+ final Encoding encoding = encodingToken .encoding ();
1623
1638
final String javaTypeName = javaTypeName (encoding .primitiveType ());
1624
1639
1625
- final int offset = token .offset ();
1640
+ final int offset = encodingToken .offset ();
1626
1641
final String byteOrderStr = byteOrderString (encoding );
1627
1642
1628
1643
return String .format (
@@ -1634,7 +1649,7 @@ private CharSequence generatePrimitivePropertyDecode(
1634
1649
indent + " }\n \n " ,
1635
1650
javaTypeName ,
1636
1651
propertyName ,
1637
- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1652
+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
1638
1653
generateGet (encoding .primitiveType (), "offset + " + offset , byteOrderStr ));
1639
1654
}
1640
1655
@@ -1723,13 +1738,17 @@ private static CharSequence generatePropertyNotPresentCondition(
1723
1738
}
1724
1739
1725
1740
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 )
1727
1746
{
1728
- final Encoding encoding = token .encoding ();
1747
+ final Encoding encoding = encodingToken .encoding ();
1729
1748
final String javaTypeName = javaTypeName (encoding .primitiveType ());
1730
- final int offset = token .offset ();
1749
+ final int offset = encodingToken .offset ();
1731
1750
final String byteOrderStr = byteOrderString (encoding );
1732
- final int fieldLength = token .arrayLength ();
1751
+ final int fieldLength = encodingToken .arrayLength ();
1733
1752
final int typeSize = sizeOfPrimitive (encoding );
1734
1753
1735
1754
final StringBuilder sb = new StringBuilder ();
@@ -1750,7 +1769,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1750
1769
javaTypeName ,
1751
1770
propertyName ,
1752
1771
fieldLength ,
1753
- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1772
+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
1754
1773
offset ,
1755
1774
typeSize ,
1756
1775
generateGet (encoding .primitiveType (), "pos" , byteOrderStr )));
@@ -1774,7 +1793,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1774
1793
indent + " }\n " ,
1775
1794
Generators .toUpperFirstChar (propertyName ),
1776
1795
fieldLength ,
1777
- generateArrayFieldNotPresentCondition (token .version (), indent ),
1796
+ generateArrayFieldNotPresentCondition (propertyToken .version (), indent ),
1778
1797
offset ));
1779
1798
1780
1799
sb .append (String .format ("\n " +
@@ -1788,7 +1807,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1788
1807
indent + " return new String(dst, 0, end, %s);\n " +
1789
1808
indent + " }\n \n " ,
1790
1809
formatPropertyName (propertyName ),
1791
- generateStringNotPresentCondition (token .version (), indent ),
1810
+ generateStringNotPresentCondition (propertyToken .version (), indent ),
1792
1811
fieldLength , offset ,
1793
1812
fieldLength , fieldLength ,
1794
1813
charset (encoding .characterEncoding ())));
@@ -2332,7 +2351,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
2332
2351
switch (typeToken .signal ())
2333
2352
{
2334
2353
case ENCODING :
2335
- sb .append (generatePrimitiveDecoder (false , propertyName , typeToken , indent ));
2354
+ sb .append (generatePrimitiveDecoder (false , propertyName , fieldToken , typeToken , indent ));
2336
2355
break ;
2337
2356
2338
2357
case BEGIN_ENUM :
@@ -2464,7 +2483,7 @@ private CharSequence generateEnumDecoder(
2464
2483
indent + " }\n \n " ,
2465
2484
enumName ,
2466
2485
propertyName ,
2467
- generatePropertyNotPresentCondition (inComposite , DECODER , token .version (), indent ),
2486
+ generatePropertyNotPresentCondition (inComposite , DECODER , signalToken .version (), indent ),
2468
2487
enumName ,
2469
2488
generateGet (encoding .primitiveType (), "offset + " + token .offset (), byteOrderString (encoding )));
2470
2489
}
@@ -2522,7 +2541,7 @@ private CharSequence generateBitSetProperty(
2522
2541
generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , bitSetName ),
2523
2542
bitSetName ,
2524
2543
propertyName ,
2525
- generatePropertyNotPresentCondition (inComposite , codecType , bitsetToken .version (), indent ),
2544
+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
2526
2545
propertyName ,
2527
2546
bitsetToken .offset (),
2528
2547
propertyName ));
@@ -2558,7 +2577,7 @@ private CharSequence generateCompositeProperty(
2558
2577
generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , compositeName ),
2559
2578
compositeName ,
2560
2579
propertyName ,
2561
- generatePropertyNotPresentCondition (inComposite , codecType , compositeToken .version (), indent ),
2580
+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
2562
2581
propertyName ,
2563
2582
compositeToken .offset (),
2564
2583
propertyName ));
0 commit comments