Skip to content

Commit 858fc9f

Browse files
authored
Merge pull request #548 from zyulyaev/better-since-version-treatment
[Java] Using sinceVersion from field instead of type declaration
2 parents d6dfb92 + 9807e40 commit 858fc9f

File tree

3 files changed

+410
-25
lines changed

3 files changed

+410
-25
lines changed

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

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

Comments
 (0)