Skip to content

Commit fee2a49

Browse files
zyulyaevNikita Zyulyaev
authored and
Nikita Zyulyaev
committed
[Java] Using sinceVersion from field instead of type declaration
1 parent 13cf84b commit fee2a49

File tree

3 files changed

+344
-23
lines changed

3 files changed

+344
-23
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)