Skip to content

Commit cfc71d3

Browse files
committed
[Java] Completed work on codec generation for valueRef on constant enums.
1 parent c4a7ff3 commit cfc71d3

File tree

6 files changed

+79
-53
lines changed

6 files changed

+79
-53
lines changed

sbe-samples/src/main/java/uk/co/real_logic/sbe/examples/ExampleUsingGeneratedStub.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ public static void decode(
200200
sb.append("\ncar.extras.sportsPack=").append(extras.sportsPack());
201201
sb.append("\ncar.extras.sunRoof=").append(extras.sunRoof());
202202

203+
sb.append("\ncar.discountedModel=").append(car.discountedModel());
204+
203205
final EngineDecoder engine = car.engine();
204206
sb.append("\ncar.engine.capacity=").append(engine.capacity());
205207
sb.append("\ncar.engine.numCylinders=").append(engine.numCylinders());
@@ -229,17 +231,17 @@ public static void decode(
229231
}
230232
}
231233

232-
sb.append("\ncar.make.semanticType=").append(CarEncoder.makeMetaAttribute(MetaAttribute.SEMANTIC_TYPE));
233-
sb.append("\ncar.make=").append(car.make());
234+
sb.append("\ncar.make.semanticType=").append(CarEncoder.makeMetaAttribute(MetaAttribute.SEMANTIC_TYPE));
235+
sb.append("\ncar.make=").append(car.make());
234236

235-
sb.append("\ncar.model=").append(
236-
new String(buffer, 0, car.getModel(buffer, 0, buffer.length), CarEncoder.modelCharacterEncoding()));
237+
sb.append("\ncar.model=").append(
238+
new String(buffer, 0, car.getModel(buffer, 0, buffer.length), CarEncoder.modelCharacterEncoding()));
237239

238-
final UnsafeBuffer tempBuffer = new UnsafeBuffer(buffer);
239-
final int tempBufferLength = car.getActivationCode(tempBuffer, 0, tempBuffer.capacity());
240-
sb.append("\ncar.activationCode=").append(new String(buffer, 0, tempBufferLength));
240+
final UnsafeBuffer tempBuffer = new UnsafeBuffer(buffer);
241+
final int tempBufferLength = car.getActivationCode(tempBuffer, 0, tempBuffer.capacity());
242+
sb.append("\ncar.activationCode=").append(new String(buffer, 0, tempBufferLength));
241243

242-
sb.append("\ncar.encodedLength=").append(car.encodedLength());
244+
sb.append("\ncar.encodedLength=").append(car.encodedLength());
243245

244246
System.out.println(sb);
245247
}

sbe-samples/src/main/java/uk/co/real_logic/sbe/examples/ExampleUsingGeneratedStubExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ public static void decode(
205205
sb.append("\ncar.extras.sportsPack=").append(extras.sportsPack());
206206
sb.append("\ncar.extras.sunRoof=").append(extras.sunRoof());
207207

208+
sb.append("\ncar.discountedModel=").append(car.discountedModel());
209+
208210
final extension.EngineDecoder engine = car.engine();
209211
sb.append("\ncar.engine.capacity=").append(engine.capacity());
210212
sb.append("\ncar.engine.numCylinders=").append(engine.numCylinders());

sbe-samples/src/main/java/uk/co/real_logic/sbe/examples/OtfExample.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ public static void main(final String[] args) throws Exception
9191
}
9292
}
9393

94-
private static void encodeSchema(final ByteBuffer byteBuffer)
95-
throws Exception
94+
private static void encodeSchema(final ByteBuffer byteBuffer) throws Exception
9695
{
9796
try (final InputStream in = new FileInputStream("src/main/resources/example-schema.xml"))
9897
{
@@ -124,8 +123,7 @@ private static void encodeTestMessage(final ByteBuffer byteBuffer)
124123
byteBuffer.position(bufferOffset);
125124
}
126125

127-
private static Ir decodeIr(final ByteBuffer buffer)
128-
throws IOException
126+
private static Ir decodeIr(final ByteBuffer buffer) throws IOException
129127
{
130128
try (final IrDecoder irDecoder = new IrDecoder(buffer))
131129
{

sbe-samples/src/main/resources/example-extension-schema.xml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,22 @@
5858
<field name="someNumbers" id="5" type="someNumbers"/>
5959
<field name="vehicleCode" id="6" type="VehicleCode"/>
6060
<field name="extras" id="7" type="OptionalExtras"/>
61-
<field name="engine" id="8" type="Engine"/>
61+
<field name="discountedModel" id="8" type="Model" presence="constant" valueRef="Model.C"/>
62+
<field name="engine" id="9" type="Engine"/>
6263
<field name="cupHolderCount" id="100" type="cupHolderCount_t" sinceVersion="1"/>
63-
<group name="fuelFigures" id="9" dimensionType="groupSizeEncoding">
64-
<field name="speed" id="10" type="uint16"/>
65-
<field name="mpg" id="11" type="float"/>
64+
<group name="fuelFigures" id="10" dimensionType="groupSizeEncoding">
65+
<field name="speed" id="11" type="uint16"/>
66+
<field name="mpg" id="12" type="float"/>
6667
</group>
67-
<group name="performanceFigures" id="12" dimensionType="groupSizeEncoding">
68-
<field name="octaneRating" id="13" type="Ron"/>
69-
<group name="acceleration" id="14" dimensionType="groupSizeEncoding">
70-
<field name="mph" id="15" type="uint16"/>
71-
<field name="seconds" id="16" type="float"/>
68+
<group name="performanceFigures" id="13" dimensionType="groupSizeEncoding">
69+
<field name="octaneRating" id="14" type="Ron"/>
70+
<group name="acceleration" id="15" dimensionType="groupSizeEncoding">
71+
<field name="mph" id="16" type="uint16"/>
72+
<field name="seconds" id="17" type="float"/>
7273
</group>
7374
</group>
74-
<data name="make" id="17" type="varDataEncoding"/>
75-
<data name="model" id="18" type="varDataEncoding"/>
76-
<data name="activationCode" id="19" type="varDataEncoding"/>
75+
<data name="make" id="18" type="varDataEncoding"/>
76+
<data name="model" id="19" type="varDataEncoding"/>
77+
<data name="activationCode" id="20" type="varDataEncoding"/>
7778
</sbe:message>
7879
</sbe:messageSchema>

sbe-samples/src/main/resources/example-schema.xml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,21 @@
5757
<field name="someNumbers" id="5" type="someNumbers"/>
5858
<field name="vehicleCode" id="6" type="VehicleCode"/>
5959
<field name="extras" id="7" type="OptionalExtras"/>
60-
<field name="engine" id="8" type="Engine"/>
61-
<group name="fuelFigures" id="9" dimensionType="groupSizeEncoding">
62-
<field name="speed" id="10" type="uint16"/>
63-
<field name="mpg" id="11" type="float"/>
60+
<field name="discountedModel" id="8" type="Model" presence="constant" valueRef="Model.C"/>
61+
<field name="engine" id="9" type="Engine"/>
62+
<group name="fuelFigures" id="10" dimensionType="groupSizeEncoding">
63+
<field name="speed" id="11" type="uint16"/>
64+
<field name="mpg" id="12" type="float"/>
6465
</group>
65-
<group name="performanceFigures" id="12" dimensionType="groupSizeEncoding">
66-
<field name="octaneRating" id="13" type="Ron"/>
67-
<group name="acceleration" id="14" dimensionType="groupSizeEncoding">
68-
<field name="mph" id="15" type="uint16"/>
69-
<field name="seconds" id="16" type="float"/>
66+
<group name="performanceFigures" id="13" dimensionType="groupSizeEncoding">
67+
<field name="octaneRating" id="14" type="Ron"/>
68+
<group name="acceleration" id="15" dimensionType="groupSizeEncoding">
69+
<field name="mph" id="16" type="uint16"/>
70+
<field name="seconds" id="17" type="float"/>
7071
</group>
7172
</group>
72-
<data name="make" id="17" type="varDataEncoding"/>
73-
<data name="model" id="18" type="varDataEncoding"/>
74-
<data name="activationCode" id="19" type="varDataEncoding"/>
73+
<data name="make" id="18" type="varDataEncoding"/>
74+
<data name="model" id="19" type="varDataEncoding"/>
75+
<data name="activationCode" id="20" type="varDataEncoding"/>
7576
</sbe:message>
7677
</sbe:messageSchema>

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

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,7 +1824,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
18241824
break;
18251825

18261826
case BEGIN_ENUM:
1827-
sb.append(generateEnumDecoder(propertyName, encodingToken, indent));
1827+
sb.append(generateEnumDecoder(signalToken, propertyName, encodingToken, indent));
18281828
break;
18291829

18301830
case BEGIN_SET:
@@ -1893,32 +1893,54 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke
18931893
));
18941894
}
18951895

1896-
private CharSequence generateEnumDecoder(final String propertyName, final Token token, final String indent)
1896+
private CharSequence generateEnumDecoder(
1897+
final Token signalToken, final String propertyName, final Token token, final String indent)
18971898
{
18981899
final String enumName = formatClassName(token.name());
18991900
final Encoding encoding = token.encoding();
19001901
final String typePrefix = encoding.primitiveType().primitiveName();
19011902

1902-
return String.format(
1903-
"\n" +
1904-
indent + " public %s %s()\n" +
1905-
indent + " {\n" +
1906-
"%s" +
1907-
indent + " return %s.get(CodecUtil.%sGet(buffer, offset + %d%s));\n" +
1908-
indent + " }\n\n",
1909-
enumName,
1910-
propertyName,
1911-
generateTypeFieldNotPresentCondition(token.version(), indent),
1912-
enumName,
1913-
typePrefix,
1914-
token.offset(),
1915-
byteOrderString(encoding)
1916-
);
1903+
if (token.isConstantEncoding())
1904+
{
1905+
return String.format(
1906+
"\n" +
1907+
indent + " public %s %s()\n" +
1908+
indent + " {\n" +
1909+
indent + " return %s;\n" +
1910+
indent + " }\n\n",
1911+
enumName,
1912+
propertyName,
1913+
signalToken.encoding().constValue().toString()
1914+
);
1915+
}
1916+
else
1917+
{
1918+
return String.format(
1919+
"\n" +
1920+
indent + " public %s %s()\n" +
1921+
indent + " {\n" +
1922+
"%s" +
1923+
indent + " return %s.get(CodecUtil.%sGet(buffer, offset + %d%s));\n" +
1924+
indent + " }\n\n",
1925+
enumName,
1926+
propertyName,
1927+
generateTypeFieldNotPresentCondition(token.version(), indent),
1928+
enumName,
1929+
typePrefix,
1930+
token.offset(),
1931+
byteOrderString(encoding)
1932+
);
1933+
}
19171934
}
19181935

19191936
private CharSequence generateEnumEncoder(
19201937
final String containingClassName, final String propertyName, final Token token, final String indent)
19211938
{
1939+
if (token.isConstantEncoding())
1940+
{
1941+
return "";
1942+
}
1943+
19221944
final String enumName = formatClassName(token.name());
19231945
final Encoding encoding = token.encoding();
19241946
final String typePrefix = encoding.primitiveType().primitiveName();

0 commit comments

Comments
 (0)