@@ -1054,12 +1054,13 @@ private void generateComposite(final List<Token> tokens) throws IOException
1054
1054
final StringBuilder sb = new StringBuilder ();
1055
1055
generateEncodingOffsetMethod (sb , propertyName , encodingToken .offset (), BASE_INDENT );
1056
1056
generateEncodingLengthMethod (sb , propertyName , encodingToken .encodedLength (), BASE_INDENT );
1057
+ generateFieldSinceVersionMethod (sb , encodingToken , BASE_INDENT );
1057
1058
1058
1059
switch (encodingToken .signal ())
1059
1060
{
1060
1061
case ENCODING :
1061
1062
out .append (sb ).append (generatePrimitiveDecoder (
1062
- true , encodingToken .name (), encodingToken , BASE_INDENT ));
1063
+ true , encodingToken .name (), encodingToken , encodingToken , BASE_INDENT ));
1063
1064
break ;
1064
1065
1065
1066
case BEGIN_ENUM :
@@ -1477,19 +1478,24 @@ private static CharSequence generateEnumDeclaration(final String name, final Tok
1477
1478
}
1478
1479
1479
1480
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 )
1481
1486
{
1482
1487
final StringBuilder sb = new StringBuilder ();
1483
1488
1484
- sb .append (generatePrimitiveFieldMetaData (propertyName , token , indent ));
1489
+ sb .append (generatePrimitiveFieldMetaData (propertyName , encodingToken , indent ));
1485
1490
1486
- if (token .isConstantEncoding ())
1491
+ if (encodingToken .isConstantEncoding ())
1487
1492
{
1488
- sb .append (generateConstPropertyMethods (propertyName , token , indent ));
1493
+ sb .append (generateConstPropertyMethods (propertyName , encodingToken , indent ));
1489
1494
}
1490
1495
else
1491
1496
{
1492
- sb .append (generatePrimitivePropertyDecodeMethods (inComposite , propertyName , token , indent ));
1497
+ sb .append (generatePrimitivePropertyDecodeMethods (
1498
+ inComposite , propertyName , propertyToken , encodingToken , indent ));
1493
1499
}
1494
1500
1495
1501
return sb ;
@@ -1515,11 +1521,16 @@ private CharSequence generatePrimitiveEncoder(
1515
1521
}
1516
1522
1517
1523
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 )
1519
1529
{
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 ));
1523
1534
}
1524
1535
1525
1536
private CharSequence generatePrimitivePropertyEncodeMethods (
@@ -1570,12 +1581,16 @@ private CharSequence generatePrimitiveFieldMetaData(
1570
1581
}
1571
1582
1572
1583
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 )
1574
1589
{
1575
- final Encoding encoding = token .encoding ();
1590
+ final Encoding encoding = encodingToken .encoding ();
1576
1591
final String javaTypeName = javaTypeName (encoding .primitiveType ());
1577
1592
1578
- final int offset = token .offset ();
1593
+ final int offset = encodingToken .offset ();
1579
1594
final String byteOrderStr = byteOrderString (encoding );
1580
1595
1581
1596
return String .format (
@@ -1587,7 +1602,7 @@ private CharSequence generatePrimitivePropertyDecode(
1587
1602
indent + " }\n \n " ,
1588
1603
javaTypeName ,
1589
1604
propertyName ,
1590
- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1605
+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
1591
1606
generateGet (encoding .primitiveType (), "offset + " + offset , byteOrderStr ));
1592
1607
}
1593
1608
@@ -1676,13 +1691,17 @@ private static CharSequence generatePropertyNotPresentCondition(
1676
1691
}
1677
1692
1678
1693
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 )
1680
1699
{
1681
- final Encoding encoding = token .encoding ();
1700
+ final Encoding encoding = encodingToken .encoding ();
1682
1701
final String javaTypeName = javaTypeName (encoding .primitiveType ());
1683
- final int offset = token .offset ();
1702
+ final int offset = encodingToken .offset ();
1684
1703
final String byteOrderStr = byteOrderString (encoding );
1685
- final int fieldLength = token .arrayLength ();
1704
+ final int fieldLength = encodingToken .arrayLength ();
1686
1705
final int typeSize = sizeOfPrimitive (encoding );
1687
1706
1688
1707
final StringBuilder sb = new StringBuilder ();
@@ -1703,7 +1722,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1703
1722
javaTypeName ,
1704
1723
propertyName ,
1705
1724
fieldLength ,
1706
- generateFieldNotPresentCondition (inComposite , token .version (), encoding , indent ),
1725
+ generateFieldNotPresentCondition (inComposite , propertyToken .version (), encoding , indent ),
1707
1726
offset ,
1708
1727
typeSize ,
1709
1728
generateGet (encoding .primitiveType (), "pos" , byteOrderStr )));
@@ -1727,7 +1746,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1727
1746
indent + " }\n " ,
1728
1747
Generators .toUpperFirstChar (propertyName ),
1729
1748
fieldLength ,
1730
- generateArrayFieldNotPresentCondition (token .version (), indent ),
1749
+ generateArrayFieldNotPresentCondition (propertyToken .version (), indent ),
1731
1750
offset ));
1732
1751
1733
1752
sb .append (String .format ("\n " +
@@ -1741,7 +1760,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
1741
1760
indent + " return new String(dst, 0, end, %s);\n " +
1742
1761
indent + " }\n \n " ,
1743
1762
formatPropertyName (propertyName ),
1744
- generateStringNotPresentCondition (token .version (), indent ),
1763
+ generateStringNotPresentCondition (propertyToken .version (), indent ),
1745
1764
fieldLength , offset ,
1746
1765
fieldLength , fieldLength ,
1747
1766
charset (encoding .characterEncoding ())));
@@ -2259,7 +2278,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
2259
2278
switch (typeToken .signal ())
2260
2279
{
2261
2280
case ENCODING :
2262
- sb .append (generatePrimitiveDecoder (false , propertyName , typeToken , indent ));
2281
+ sb .append (generatePrimitiveDecoder (false , propertyName , fieldToken , typeToken , indent ));
2263
2282
break ;
2264
2283
2265
2284
case BEGIN_ENUM :
@@ -2485,7 +2504,7 @@ private CharSequence generateCompositeProperty(
2485
2504
generateFlyweightPropertyJavadoc (indent + INDENT , propertyToken , compositeName ),
2486
2505
compositeName ,
2487
2506
propertyName ,
2488
- generatePropertyNotPresentCondition (inComposite , codecType , compositeToken .version (), indent ),
2507
+ generatePropertyNotPresentCondition (inComposite , codecType , propertyToken .version (), indent ),
2489
2508
propertyName ,
2490
2509
compositeToken .offset (),
2491
2510
propertyName ));
0 commit comments