Skip to content

Commit d9868d2

Browse files
committed
[Java] Fix var data and composite code generation to use property name instead of plain name. Also use property name for access order check methods.
1 parent 7822307 commit d9868d2

File tree

3 files changed

+133
-99
lines changed

3 files changed

+133
-99
lines changed

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

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -471,12 +471,12 @@ private void generateFullyEncodedCheck(
471471

472472
private static String accessOrderListenerMethodName(final Token token)
473473
{
474-
return "on" + Generators.toUpperFirstChar(token.name()) + "Accessed";
474+
return "on" + Generators.toUpperFirstChar(formatPropertyName(token.name())) + "Accessed";
475475
}
476476

477477
private static String accessOrderListenerMethodName(final Token token, final String suffix)
478478
{
479-
return "on" + Generators.toUpperFirstChar(token.name()) + suffix + "Accessed";
479+
return "on" + Generators.toUpperFirstChar(formatPropertyName(token.name())) + suffix + "Accessed";
480480
}
481481

482482
private static void generateAccessOrderListenerMethod(
@@ -1428,15 +1428,15 @@ private void generateDecoderVarData(
14281428
{
14291429
throw new IllegalStateException("tokens must begin with BEGIN_VAR_DATA: token=" + token);
14301430
}
1431+
final String propertyName = formatPropertyName(token.name());
14311432

1432-
generateFieldIdMethod(sb, token, indent);
1433-
generateFieldSinceVersionMethod(sb, token, indent);
1433+
generateFieldIdMethod(sb, token, propertyName, indent);
1434+
generateFieldSinceVersionMethod(sb, token, propertyName, indent);
14341435

14351436
final String characterEncoding = tokens.get(i + 3).encoding().characterEncoding();
1436-
generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent);
1437-
generateFieldMetaAttributeMethod(sb, token, indent);
1437+
generateCharacterEncodingMethod(sb, propertyName, characterEncoding, indent);
1438+
generateFieldMetaAttributeMethod(sb, token, propertyName, indent);
14381439

1439-
final String propertyName = Generators.toUpperFirstChar(token.name());
14401440
final Token lengthToken = tokens.get(i + 2);
14411441
final int sizeOfLengthField = lengthToken.encodedLength();
14421442
final Encoding lengthEncoding = lengthToken.encoding();
@@ -1492,13 +1492,14 @@ private void generateEncoderVarData(
14921492
throw new IllegalStateException("tokens must begin with BEGIN_VAR_DATA: token=" + token);
14931493
}
14941494

1495-
generateFieldIdMethod(sb, token, indent);
1495+
final String propertyName = formatPropertyName(token.name());
1496+
1497+
generateFieldIdMethod(sb, token, propertyName, indent);
14961498
final Token varDataToken = Generators.findFirst("varData", tokens, i);
14971499
final String characterEncoding = varDataToken.encoding().characterEncoding();
1498-
generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent);
1499-
generateFieldMetaAttributeMethod(sb, token, indent);
1500+
generateCharacterEncodingMethod(sb, propertyName, characterEncoding, indent);
1501+
generateFieldMetaAttributeMethod(sb, token, propertyName, indent);
15001502

1501-
final String propertyName = Generators.toUpperFirstChar(token.name());
15021503
final Token lengthToken = Generators.findFirst("length", tokens, i);
15031504
final int sizeOfLengthField = lengthToken.encodedLength();
15041505
final Encoding lengthEncoding = lengthToken.encoding();
@@ -1614,7 +1615,7 @@ private void generateDataDecodeMethods(
16141615
indent + " buffer.getBytes(limit + headerLength, tmp, 0, dataLength);\n\n" +
16151616
indent + " return new String(tmp, %6$s);\n" +
16161617
indent + " }\n",
1617-
formatPropertyName(propertyName),
1618+
propertyName,
16181619
generateStringNotPresentCondition(false, token.version(), indent),
16191620
sizeOfLengthField,
16201621
PrimitiveType.UINT32 == lengthType ? "(int)" : "",
@@ -1668,7 +1669,7 @@ private void generateVarDataWrapDecoder(
16681669
indent + " parentMessage.limit(limit + headerLength + dataLength);\n" +
16691670
indent + " wrapBuffer.wrap(buffer, limit + headerLength, dataLength);\n" +
16701671
indent + " }\n",
1671-
propertyName,
1672+
Generators.toUpperFirstChar(propertyName),
16721673
readOnlyBuffer,
16731674
generateWrapFieldNotPresentCondition(false, token.version(), indent),
16741675
accessOrderListenerCall,
@@ -1845,7 +1846,7 @@ private void generateVarDataTypedDecoder(
18451846
indent + " buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied);\n\n" +
18461847
indent + " return bytesCopied;\n" +
18471848
indent + " }\n",
1848-
propertyName,
1849+
Generators.toUpperFirstChar(propertyName),
18491850
exchangeType,
18501851
generateArrayFieldNotPresentCondition(false, token.version(), indent),
18511852
accessOrderListenerCall,
@@ -1884,7 +1885,7 @@ private void generateDataTypedEncoder(
18841885
indent + " return this;\n" +
18851886
indent + " }\n",
18861887
className,
1887-
propertyName,
1888+
Generators.toUpperFirstChar(propertyName),
18881889
exchangeType,
18891890
maxLengthValue,
18901891
sizeOfLengthField,
@@ -2010,7 +2011,7 @@ private void generateComposite(final List<Token> tokens) throws IOException
20102011
final StringBuilder sb = new StringBuilder();
20112012
generateEncodingOffsetMethod(sb, propertyName, encodingToken.offset(), BASE_INDENT);
20122013
generateEncodingLengthMethod(sb, propertyName, encodingToken.encodedLength(), BASE_INDENT);
2013-
generateFieldSinceVersionMethod(sb, encodingToken, BASE_INDENT);
2014+
generateFieldSinceVersionMethod(sb, encodingToken, propertyName, BASE_INDENT);
20142015
final String accessOrderListenerCall = "";
20152016

20162017
switch (encodingToken.signal())
@@ -3239,9 +3240,8 @@ private static void generateCharacterEncodingMethod(
32393240
{
32403241
if (null != characterEncoding)
32413242
{
3242-
final String propName = formatPropertyName(propertyName);
32433243
sb.append("\n")
3244-
.append(indent).append(" public static String ").append(propName).append("CharacterEncoding()\n")
3244+
.append(indent).append(" public static String ").append(propertyName).append("CharacterEncoding()\n")
32453245
.append(indent).append(" {\n")
32463246
.append(indent).append(" return ").append(charsetName(characterEncoding)).append(";\n")
32473247
.append(indent).append(" }\n");
@@ -3656,11 +3656,11 @@ private void generateEncoderFields(
36563656
final String propertyName = formatPropertyName(fieldToken.name());
36573657
final String typeName = encoderName(typeToken.name());
36583658

3659-
generateFieldIdMethod(sb, fieldToken, indent);
3660-
generateFieldSinceVersionMethod(sb, fieldToken, indent);
3659+
generateFieldIdMethod(sb, fieldToken, propertyName, indent);
3660+
generateFieldSinceVersionMethod(sb, fieldToken, propertyName, indent);
36613661
generateEncodingOffsetMethod(sb, propertyName, fieldToken.offset(), indent);
36623662
generateEncodingLengthMethod(sb, propertyName, typeToken.encodedLength(), indent);
3663-
generateFieldMetaAttributeMethod(sb, fieldToken, indent);
3663+
generateFieldMetaAttributeMethod(sb, fieldToken, propertyName, indent);
36643664
generateAccessOrderListenerMethod(sb, fieldPrecedenceModel, indent + " ", fieldToken);
36653665
final CharSequence accessOrderListenerCall = generateAccessOrderListenerCall(
36663666
fieldPrecedenceModel, indent + " ", fieldToken);
@@ -3708,11 +3708,11 @@ private void generateDecoderFields(
37083708
final String propertyName = formatPropertyName(fieldToken.name());
37093709
final String typeName = decoderName(typeToken.name());
37103710

3711-
generateFieldIdMethod(sb, fieldToken, indent);
3712-
generateFieldSinceVersionMethod(sb, fieldToken, indent);
3711+
generateFieldIdMethod(sb, fieldToken, propertyName, indent);
3712+
generateFieldSinceVersionMethod(sb, fieldToken, propertyName, indent);
37133713
generateEncodingOffsetMethod(sb, propertyName, fieldToken.offset(), indent);
37143714
generateEncodingLengthMethod(sb, propertyName, typeToken.encodedLength(), indent);
3715-
generateFieldMetaAttributeMethod(sb, fieldToken, indent);
3715+
generateFieldMetaAttributeMethod(sb, fieldToken, propertyName, indent);
37163716

37173717
generateAccessOrderListenerMethod(sb, fieldPrecedenceModel, indent + " ", fieldToken);
37183718
final CharSequence accessOrderListenerCall = generateAccessOrderListenerCall(
@@ -3748,9 +3748,9 @@ private void generateDecoderFields(
37483748
});
37493749
}
37503750

3751-
private static void generateFieldIdMethod(final StringBuilder sb, final Token token, final String indent)
3751+
private static void generateFieldIdMethod(
3752+
final StringBuilder sb, final Token token, final String propertyName, final String indent)
37523753
{
3753-
final String propertyName = formatPropertyName(token.name());
37543754
sb.append("\n")
37553755
.append(indent).append(" public static int ").append(propertyName).append("Id()\n")
37563756
.append(indent).append(" {\n")
@@ -3759,9 +3759,8 @@ private static void generateFieldIdMethod(final StringBuilder sb, final Token to
37593759
}
37603760

37613761
private static void generateEncodingOffsetMethod(
3762-
final StringBuilder sb, final String name, final int offset, final String indent)
3762+
final StringBuilder sb, final String propertyName, final int offset, final String indent)
37633763
{
3764-
final String propertyName = formatPropertyName(name);
37653764
sb.append("\n")
37663765
.append(indent).append(" public static int ").append(propertyName).append("EncodingOffset()\n")
37673766
.append(indent).append(" {\n")
@@ -3770,34 +3769,33 @@ private static void generateEncodingOffsetMethod(
37703769
}
37713770

37723771
private static void generateEncodingLengthMethod(
3773-
final StringBuilder sb, final String name, final int length, final String indent)
3772+
final StringBuilder sb, final String propertyName, final int length, final String indent)
37743773
{
3775-
final String propertyName = formatPropertyName(name);
37763774
sb.append("\n")
37773775
.append(indent).append(" public static int ").append(propertyName).append("EncodingLength()\n")
37783776
.append(indent).append(" {\n")
37793777
.append(indent).append(" return ").append(length).append(";\n")
37803778
.append(indent).append(" }\n");
37813779
}
37823780

3783-
private static void generateFieldSinceVersionMethod(final StringBuilder sb, final Token token, final String indent)
3781+
private static void generateFieldSinceVersionMethod(
3782+
final StringBuilder sb, final Token token, final String propertyName, final String indent)
37843783
{
3785-
final String propertyName = formatPropertyName(token.name());
37863784
sb.append("\n")
37873785
.append(indent).append(" public static int ").append(propertyName).append("SinceVersion()\n")
37883786
.append(indent).append(" {\n")
37893787
.append(indent).append(" return ").append(token.version()).append(";\n")
37903788
.append(indent).append(" }\n");
37913789
}
37923790

3793-
private static void generateFieldMetaAttributeMethod(final StringBuilder sb, final Token token, final String indent)
3791+
private static void generateFieldMetaAttributeMethod(
3792+
final StringBuilder sb, final Token token, final String propertyName, final String indent)
37943793
{
37953794
final Encoding encoding = token.encoding();
37963795
final String epoch = encoding.epoch() == null ? "" : encoding.epoch();
37973796
final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit();
37983797
final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType();
37993798
final String presence = encoding.presence().toString().toLowerCase();
3800-
final String propertyName = formatPropertyName(token.name());
38013799

38023800
sb.append("\n")
38033801
.append(indent).append(" public static String ")
@@ -4429,8 +4427,8 @@ private void appendDecoderDisplay(
44294427
if (fieldToken.signal() == Signal.BEGIN_FIELD)
44304428
{
44314429
final Token encodingToken = fields.get(i + 1);
4432-
final String fieldName = formatPropertyName(fieldToken.name());
4433-
lengthBeforeLastGeneratedSeparator = writeTokenDisplay(fieldName, encodingToken, sb, indent);
4430+
final String propertyName = formatPropertyName(fieldToken.name());
4431+
lengthBeforeLastGeneratedSeparator = writeTokenDisplay(propertyName, encodingToken, sb, indent);
44344432

44354433
i += fieldToken.componentTokenCount();
44364434
}
@@ -4486,8 +4484,8 @@ private void appendDecoderDisplay(
44864484
}
44874485

44884486
final String characterEncoding = varData.get(i + 3).encoding().characterEncoding();
4489-
final String varDataName = formatPropertyName(varDataToken.name());
4490-
append(sb, indent, "builder.append(\"" + varDataName + Separator.KEY_VALUE + "\");");
4487+
final String propertyName = formatPropertyName(varDataToken.name());
4488+
append(sb, indent, "builder.append(\"" + propertyName + Separator.KEY_VALUE + "\");");
44914489
if (null == characterEncoding)
44924490
{
44934491
final String name = Generators.toUpperFirstChar(varDataToken.name());
@@ -4498,12 +4496,12 @@ private void appendDecoderDisplay(
44984496
if (isAsciiEncoding(characterEncoding))
44994497
{
45004498
append(sb, indent, "builder.append('\\'');");
4501-
append(sb, indent, formatGetterName(varDataToken.name()) + "(builder);");
4499+
append(sb, indent, formatGetterName(propertyName) + "(builder);");
45024500
append(sb, indent, "builder.append('\\'');");
45034501
}
45044502
else
45054503
{
4506-
append(sb, indent, "builder.append('\\'').append(" + varDataName + "()).append('\\'');");
4504+
append(sb, indent, "builder.append('\\'').append(" + propertyName + "()).append('\\'');");
45074505
}
45084506
}
45094507

sbe-tool/src/test/resources/code-generation-schema.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@
180180
<field name="mph" id="93" type="uint16"/>
181181
<field name="try" id="94" type="float"/>
182182
<field name="defer" id="95" type="float"/>
183+
<field name="new" id="96" type="CharArray9"/>
184+
<data name="import" id="97" type="varAsciiStringEncoding"/>
183185
</group>
184186
</group>
185187
<data name="go" id="100" type="varStringEncoding"/>

0 commit comments

Comments
 (0)