Skip to content

Commit 1f6ec0e

Browse files
committed
[Java] Preserve packageName in the IR.
Fixes #1089.
1 parent 71a8ada commit 1f6ec0e

File tree

7 files changed

+300
-3
lines changed

7 files changed

+300
-3
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/IrDecoder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,9 @@ private Token decodeToken()
266266
final String referencedName = tokenDecoder.referencedName();
267267
tokenBuilder.referencedName(referencedName.isEmpty() ? null : referencedName);
268268

269+
final String packageName = tokenDecoder.packageName();
270+
tokenBuilder.packageName(packageName.isEmpty() ? null : packageName);
271+
269272
offset += tokenDecoder.encodedLength();
270273

271274
return tokenBuilder.encoding(encBuilder.build()).build();

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/IrEncoder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ private int encodeToken(final Token token)
223223

224224
final byte[] referencedNameBytes = getBytes(token.referencedName(), referencedNameCharacterEncoding());
225225
tokenEncoder.putReferencedName(referencedNameBytes, 0, referencedNameBytes.length);
226+
227+
final byte[] packageNameBytes = getBytes(token.packageName(), packageNameCharacterEncoding());
228+
tokenEncoder.putPackageName(packageNameBytes, 0, packageNameBytes.length);
226229
}
227230
catch (final UnsupportedEncodingException ex)
228231
{

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/TokenCodecDecoder.java

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public final class TokenCodecDecoder
5959
* V0_SEMANTICTYPE_DONE -> V0_DESCRIPTION_DONE [label=" description(?) "];
6060
* V0_DESCRIPTION_DONE -> V0_DESCRIPTION_DONE [label=" referencedNameLength() "];
6161
* V0_DESCRIPTION_DONE -> V0_REFERENCEDNAME_DONE [label=" referencedName(?) "];
62+
* V0_REFERENCEDNAME_DONE -> V0_REFERENCEDNAME_DONE [label=" packageNameLength() "];
63+
* V0_REFERENCEDNAME_DONE -> V0_PACKAGENAME_DONE [label=" packageName(?) "];
6264
* }
6365
* }</pre>
6466
*/
@@ -77,6 +79,7 @@ private static class CodecStates
7779
private static final int V0_SEMANTICTYPE_DONE = 10;
7880
private static final int V0_DESCRIPTION_DONE = 11;
7981
private static final int V0_REFERENCEDNAME_DONE = 12;
82+
private static final int V0_PACKAGENAME_DONE = 13;
8083

8184
private static final String[] STATE_NAME_LOOKUP =
8285
{
@@ -93,6 +96,7 @@ private static class CodecStates
9396
"V0_SEMANTICTYPE_DONE",
9497
"V0_DESCRIPTION_DONE",
9598
"V0_REFERENCEDNAME_DONE",
99+
"V0_PACKAGENAME_DONE",
96100
};
97101

98102
private static final String[] STATE_TRANSITIONS_LOOKUP =
@@ -109,6 +113,7 @@ private static class CodecStates
109113
"\"semanticTypeLength()\", \"semanticType(?)\"",
110114
"\"descriptionLength()\", \"description(?)\"",
111115
"\"referencedNameLength()\", \"referencedName(?)\"",
116+
"\"packageNameLength()\", \"packageName(?)\"",
112117
"",
113118
};
114119

@@ -2667,6 +2672,164 @@ public String referencedName()
26672672
return new String(tmp, java.nio.charset.StandardCharsets.UTF_8);
26682673
}
26692674

2675+
public static int packageNameId()
2676+
{
2677+
return 22;
2678+
}
2679+
2680+
public static int packageNameSinceVersion()
2681+
{
2682+
return 0;
2683+
}
2684+
2685+
public static String packageNameCharacterEncoding()
2686+
{
2687+
return java.nio.charset.StandardCharsets.UTF_8.name();
2688+
}
2689+
2690+
public static String packageNameMetaAttribute(final MetaAttribute metaAttribute)
2691+
{
2692+
if (MetaAttribute.PRESENCE == metaAttribute)
2693+
{
2694+
return "required";
2695+
}
2696+
2697+
return "";
2698+
}
2699+
2700+
public static int packageNameHeaderLength()
2701+
{
2702+
return 2;
2703+
}
2704+
2705+
void onPackageNameLengthAccessed()
2706+
{
2707+
switch (codecState())
2708+
{
2709+
case CodecStates.V0_REFERENCEDNAME_DONE:
2710+
codecState(CodecStates.V0_REFERENCEDNAME_DONE);
2711+
break;
2712+
default:
2713+
throw new IllegalStateException("Illegal field access order. " +
2714+
"Cannot decode length of var data \"packageName\" in state: " + CodecStates.name(codecState()) +
2715+
". Expected one of these transitions: [" + CodecStates.transitions(codecState()) +
2716+
"]. Please see the diagram in the Javadoc of the class TokenCodecDecoder#CodecStates.");
2717+
}
2718+
}
2719+
2720+
private void onPackageNameAccessed()
2721+
{
2722+
switch (codecState())
2723+
{
2724+
case CodecStates.V0_REFERENCEDNAME_DONE:
2725+
codecState(CodecStates.V0_PACKAGENAME_DONE);
2726+
break;
2727+
default:
2728+
throw new IllegalStateException("Illegal field access order. " +
2729+
"Cannot access field \"packageName\" in state: " + CodecStates.name(codecState()) +
2730+
". Expected one of these transitions: [" + CodecStates.transitions(codecState()) +
2731+
"]. Please see the diagram in the Javadoc of the class TokenCodecDecoder#CodecStates.");
2732+
}
2733+
}
2734+
2735+
public int packageNameLength()
2736+
{
2737+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2738+
{
2739+
onPackageNameLengthAccessed();
2740+
}
2741+
2742+
final int limit = parentMessage.limit();
2743+
return (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2744+
}
2745+
2746+
public int skipPackageName()
2747+
{
2748+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2749+
{
2750+
onPackageNameAccessed();
2751+
}
2752+
2753+
final int headerLength = 2;
2754+
final int limit = parentMessage.limit();
2755+
final int dataLength = (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2756+
final int dataOffset = limit + headerLength;
2757+
parentMessage.limit(dataOffset + dataLength);
2758+
2759+
return dataLength;
2760+
}
2761+
2762+
public int getPackageName(final MutableDirectBuffer dst, final int dstOffset, final int length)
2763+
{
2764+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2765+
{
2766+
onPackageNameAccessed();
2767+
}
2768+
2769+
final int headerLength = 2;
2770+
final int limit = parentMessage.limit();
2771+
final int dataLength = (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2772+
final int bytesCopied = Math.min(length, dataLength);
2773+
parentMessage.limit(limit + headerLength + dataLength);
2774+
buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied);
2775+
2776+
return bytesCopied;
2777+
}
2778+
2779+
public int getPackageName(final byte[] dst, final int dstOffset, final int length)
2780+
{
2781+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2782+
{
2783+
onPackageNameAccessed();
2784+
}
2785+
2786+
final int headerLength = 2;
2787+
final int limit = parentMessage.limit();
2788+
final int dataLength = (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2789+
final int bytesCopied = Math.min(length, dataLength);
2790+
parentMessage.limit(limit + headerLength + dataLength);
2791+
buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied);
2792+
2793+
return bytesCopied;
2794+
}
2795+
2796+
public void wrapPackageName(final DirectBuffer wrapBuffer)
2797+
{
2798+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2799+
{
2800+
onPackageNameAccessed();
2801+
}
2802+
2803+
final int headerLength = 2;
2804+
final int limit = parentMessage.limit();
2805+
final int dataLength = (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2806+
parentMessage.limit(limit + headerLength + dataLength);
2807+
wrapBuffer.wrap(buffer, limit + headerLength, dataLength);
2808+
}
2809+
2810+
public String packageName()
2811+
{
2812+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2813+
{
2814+
onPackageNameAccessed();
2815+
}
2816+
2817+
final int headerLength = 2;
2818+
final int limit = parentMessage.limit();
2819+
final int dataLength = (buffer.getShort(limit, BYTE_ORDER) & 0xFFFF);
2820+
parentMessage.limit(limit + headerLength + dataLength);
2821+
2822+
if (0 == dataLength)
2823+
{
2824+
return "";
2825+
}
2826+
2827+
final byte[] tmp = new byte[dataLength];
2828+
buffer.getBytes(limit + headerLength, tmp, 0, dataLength);
2829+
2830+
return new String(tmp, java.nio.charset.StandardCharsets.UTF_8);
2831+
}
2832+
26702833
public String toString()
26712834
{
26722835
if (null == buffer)
@@ -2770,6 +2933,9 @@ public StringBuilder appendTo(final StringBuilder builder)
27702933
builder.append('|');
27712934
builder.append("referencedName=");
27722935
builder.append('\'').append(referencedName()).append('\'');
2936+
builder.append('|');
2937+
builder.append("packageName=");
2938+
builder.append('\'').append(packageName()).append('\'');
27732939

27742940
limit(originalLimit);
27752941

@@ -2790,6 +2956,7 @@ public TokenCodecDecoder sbeSkip()
27902956
skipSemanticType();
27912957
skipDescription();
27922958
skipReferencedName();
2959+
skipPackageName();
27932960

27942961
return this;
27952962
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/TokenCodecEncoder.java

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public final class TokenCodecEncoder
5959
* V0_SEMANTICTYPE_DONE -> V0_DESCRIPTION_DONE [label=" description(?) "];
6060
* V0_DESCRIPTION_DONE -> V0_DESCRIPTION_DONE [label=" referencedNameLength() "];
6161
* V0_DESCRIPTION_DONE -> V0_REFERENCEDNAME_DONE [label=" referencedName(?) "];
62+
* V0_REFERENCEDNAME_DONE -> V0_REFERENCEDNAME_DONE [label=" packageNameLength() "];
63+
* V0_REFERENCEDNAME_DONE -> V0_PACKAGENAME_DONE [label=" packageName(?) "];
6264
* }
6365
* }</pre>
6466
*/
@@ -77,6 +79,7 @@ private static class CodecStates
7779
private static final int V0_SEMANTICTYPE_DONE = 10;
7880
private static final int V0_DESCRIPTION_DONE = 11;
7981
private static final int V0_REFERENCEDNAME_DONE = 12;
82+
private static final int V0_PACKAGENAME_DONE = 13;
8083

8184
private static final String[] STATE_NAME_LOOKUP =
8285
{
@@ -93,6 +96,7 @@ private static class CodecStates
9396
"V0_SEMANTICTYPE_DONE",
9497
"V0_DESCRIPTION_DONE",
9598
"V0_REFERENCEDNAME_DONE",
99+
"V0_PACKAGENAME_DONE",
96100
};
97101

98102
private static final String[] STATE_TRANSITIONS_LOOKUP =
@@ -109,6 +113,7 @@ private static class CodecStates
109113
"\"semanticTypeLength()\", \"semanticType(?)\"",
110114
"\"descriptionLength()\", \"description(?)\"",
111115
"\"referencedNameLength()\", \"referencedName(?)\"",
116+
"\"packageNameLength()\", \"packageName(?)\"",
112117
"",
113118
};
114119

@@ -2009,6 +2014,112 @@ public TokenCodecEncoder referencedName(final String value)
20092014
return this;
20102015
}
20112016

2017+
public static int packageNameId()
2018+
{
2019+
return 22;
2020+
}
2021+
2022+
public static String packageNameCharacterEncoding()
2023+
{
2024+
return java.nio.charset.StandardCharsets.UTF_8.name();
2025+
}
2026+
2027+
public static String packageNameMetaAttribute(final MetaAttribute metaAttribute)
2028+
{
2029+
if (MetaAttribute.PRESENCE == metaAttribute)
2030+
{
2031+
return "required";
2032+
}
2033+
2034+
return "";
2035+
}
2036+
2037+
public static int packageNameHeaderLength()
2038+
{
2039+
return 2;
2040+
}
2041+
2042+
private void onPackageNameAccessed()
2043+
{
2044+
switch (codecState())
2045+
{
2046+
case CodecStates.V0_REFERENCEDNAME_DONE:
2047+
codecState(CodecStates.V0_PACKAGENAME_DONE);
2048+
break;
2049+
default:
2050+
throw new IllegalStateException("Illegal field access order. " +
2051+
"Cannot access field \"packageName\" in state: " + CodecStates.name(codecState()) +
2052+
". Expected one of these transitions: [" + CodecStates.transitions(codecState()) +
2053+
"]. Please see the diagram in the Javadoc of the class TokenCodecEncoder#CodecStates.");
2054+
}
2055+
}
2056+
2057+
public TokenCodecEncoder putPackageName(final DirectBuffer src, final int srcOffset, final int length)
2058+
{
2059+
if (length > 65534)
2060+
{
2061+
throw new IllegalStateException("length > maxValue for type: " + length);
2062+
}
2063+
2064+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2065+
{
2066+
onPackageNameAccessed();
2067+
}
2068+
2069+
final int headerLength = 2;
2070+
final int limit = parentMessage.limit();
2071+
parentMessage.limit(limit + headerLength + length);
2072+
buffer.putShort(limit, (short)length, BYTE_ORDER);
2073+
buffer.putBytes(limit + headerLength, src, srcOffset, length);
2074+
2075+
return this;
2076+
}
2077+
2078+
public TokenCodecEncoder putPackageName(final byte[] src, final int srcOffset, final int length)
2079+
{
2080+
if (length > 65534)
2081+
{
2082+
throw new IllegalStateException("length > maxValue for type: " + length);
2083+
}
2084+
2085+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2086+
{
2087+
onPackageNameAccessed();
2088+
}
2089+
2090+
final int headerLength = 2;
2091+
final int limit = parentMessage.limit();
2092+
parentMessage.limit(limit + headerLength + length);
2093+
buffer.putShort(limit, (short)length, BYTE_ORDER);
2094+
buffer.putBytes(limit + headerLength, src, srcOffset, length);
2095+
2096+
return this;
2097+
}
2098+
2099+
public TokenCodecEncoder packageName(final String value)
2100+
{
2101+
final byte[] bytes = (null == value || value.isEmpty()) ? org.agrona.collections.ArrayUtil.EMPTY_BYTE_ARRAY : value.getBytes(java.nio.charset.StandardCharsets.UTF_8);
2102+
2103+
final int length = bytes.length;
2104+
if (length > 65534)
2105+
{
2106+
throw new IllegalStateException("length > maxValue for type: " + length);
2107+
}
2108+
2109+
if (SBE_ENABLE_IR_PRECEDENCE_CHECKS)
2110+
{
2111+
onPackageNameAccessed();
2112+
}
2113+
2114+
final int headerLength = 2;
2115+
final int limit = parentMessage.limit();
2116+
parentMessage.limit(limit + headerLength + length);
2117+
buffer.putShort(limit, (short)length, BYTE_ORDER);
2118+
buffer.putBytes(limit + headerLength, bytes, 0, length);
2119+
2120+
return this;
2121+
}
2122+
20122123
public String toString()
20132124
{
20142125
if (null == buffer)
@@ -2038,7 +2149,7 @@ public void checkEncodingIsComplete()
20382149
{
20392150
switch (codecState)
20402151
{
2041-
case CodecStates.V0_REFERENCEDNAME_DONE:
2152+
case CodecStates.V0_PACKAGENAME_DONE:
20422153
return;
20432154
default:
20442155
throw new IllegalStateException("Not fully encoded, current state: " +

sbe-tool/src/main/resources/sbe-ir.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,6 @@
9696
<data name="semanticType" id="19" type="varDataEncoding"/>
9797
<data name="description" id="20" type="varDataEncoding"/>
9898
<data name="referencedName" id="21" type="varDataEncoding"/>
99+
<data name="packageName" id="22" type="varDataEncoding"/>
99100
</sbe:message>
100101
</sbe:messageSchema>

0 commit comments

Comments
 (0)