Skip to content

Commit a0d777a

Browse files
authored
Merge pull request #603 from kdkavanagh/master
Only generate non-constant header fields in wrapAndApply method. Fix…
2 parents 4226b41 + bc7c094 commit a0d777a

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

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

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2340,19 +2340,42 @@ private CharSequence generateEncoderFlyweightCode(final String className, final
23402340
" }\n\n",
23412341
className,
23422342
mutableBuffer);
2343-
2344-
final String wrapAndApplyHeaderMethod = String.format(
2343+
final String indent = " ";
2344+
String wrapAndApplyHeaderMethodFmtString =
23452345
" public %1$s wrapAndApplyHeader(\n" +
23462346
" final %2$s buffer, final int offset, final %3$s headerEncoder)\n" +
23472347
" {\n" +
23482348
" headerEncoder\n" +
2349-
" .wrap(buffer, offset)\n" +
2350-
" .blockLength(BLOCK_LENGTH)\n" +
2351-
" .templateId(TEMPLATE_ID)\n" +
2352-
" .schemaId(SCHEMA_ID)\n" +
2353-
" .version(SCHEMA_VERSION);\n\n" +
2349+
" .wrap(buffer, offset)";
2350+
for (final Token headerToken : ir.headerStructure().tokens())
2351+
{
2352+
if (!headerToken.isConstantEncoding())
2353+
{
2354+
final String fieldName = headerToken.name();
2355+
switch (fieldName)
2356+
{
2357+
case "blockLength":
2358+
wrapAndApplyHeaderMethodFmtString += '\n' + indent + ".blockLength(BLOCK_LENGTH)";
2359+
break;
2360+
case "templateId":
2361+
wrapAndApplyHeaderMethodFmtString += '\n' + indent + ".templateId(TEMPLATE_ID)";
2362+
break;
2363+
case "schemaId":
2364+
wrapAndApplyHeaderMethodFmtString += '\n' + indent + ".schemaId(SCHEMA_ID)";
2365+
break;
2366+
case "version":
2367+
wrapAndApplyHeaderMethodFmtString += '\n' + indent + ".version(SCHEMA_VERSION)";
2368+
break;
2369+
}
2370+
}
2371+
}
2372+
2373+
2374+
wrapAndApplyHeaderMethodFmtString += ";\n" +
23542375
" return wrap(buffer, offset + %3$s.ENCODED_LENGTH);\n" +
2355-
" }\n\n",
2376+
" }\n\n";
2377+
final String wrapAndApplyHeaderMethod = String.format(
2378+
wrapAndApplyHeaderMethodFmtString,
23562379
className,
23572380
mutableBuffer,
23582381
formatClassName(ir.headerStructure().tokens().get(0).applicableTypeName() + "Encoder"));

sbe-tool/src/test/java/uk/co/real_logic/sbe/xml/BasicSchemaFileTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ public void shouldHandleBasicFile()
3333
parse(TestUtil.getLocalResource("basic-schema.xml"), ParserOptions.DEFAULT);
3434
}
3535

36+
@Test
37+
public void shouldHandleConstantHeaderField()
38+
throws Exception
39+
{
40+
parse(TestUtil.getLocalResource("basic-schema-constant-header-field.xml"), ParserOptions.DEFAULT);
41+
}
42+
3643
@Test
3744
public void shouldHandleBasicFileWithGroup()
3845
throws Exception
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<messageSchema package="SBE tests"
3+
id="2"
4+
semanticVersion="5.2"
5+
description="Unit Test"
6+
byteOrder="littleEndian">
7+
<types>
8+
<type name="Symbol" description="Symbol" length="20" primitiveType="char" semanticType="char"/>
9+
<composite name="messageHeader" description="Message identifiers and length of message root">
10+
<type name="blockLength" primitiveType="uint16"/>
11+
<type name="templateId" primitiveType="uint16"/>
12+
<type name="schemaId" primitiveType="uint16" presence="constant">1</type>
13+
<type name="version" primitiveType="uint16"/>
14+
</composite>
15+
</types>
16+
<message name="TestMessage50001" id="50001" description="TestMessage" blockLength="16">
17+
<field name="Tag40001" id="40001" type="uint32" semanticType="int"/>
18+
</message>
19+
</messageSchema>

0 commit comments

Comments
 (0)