Skip to content

Commit 61bf426

Browse files
committed
[Go] Handle _ and String as keywords + use property name when generating variable data section.
1 parent 8985a96 commit 61bf426

File tree

5 files changed

+88
-84
lines changed

5 files changed

+88
-84
lines changed

gocode/flyweight/src/otf/otf_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"testing"
88
)
99

10-
//go:generate java --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dsbe.output.dir=. -Dsbe.target.language=golang -Dsbe.go.generate.generate.flyweights=true -Dsbe.generate.ir=true -jar ../../../${SBE_JAR} ../../../../sbe-tool/src/test/resources/code-generation-schema.xml
10+
//go:generate java --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dsbe.output.dir=. -Dsbe.target.language=golang -Dsbe.go.generate.generate.flyweights=true -Dsbe.generate.ir=true -Dsbe.keyword.append.token=X -jar ../../../${SBE_JAR} ../../../../sbe-tool/src/test/resources/code-generation-schema.xml
1111

1212
const SchemaFilename = "code-generation-schema.sbeir"
1313
const MsgBufferCapacity = 4 * 1024

sbe-tool/src/main/java/uk/co/real_logic/sbe/ValidationUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ private static boolean isJavaIdentifier(final String token)
295295
"case", "defer", "go", "map", "struct",
296296
"chan", "else", "goto", "package", "switch",
297297
"const", "fallthrough", "if", "range", "type",
298-
"continue", "for", "import", "return", "var",
298+
"continue", "for", "import", "return", "var", "_",
299299

300300
/* https://golang.org/ref/spec#Predeclared_identifiers */
301301
/* types */
@@ -308,7 +308,7 @@ private static boolean isJavaIdentifier(final String token)
308308
"nil",
309309
/* functions */
310310
"append", "cap", "close", "complex", "copy", "delete", "imag", "len",
311-
"make", "new", "panic", "print", "println", "real", "recover");
311+
"make", "new", "panic", "print", "println", "real", "recover", "String");
312312

313313
/**
314314
* "Check" value for validity of usage as a golang identifier. From:

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/flyweight/GolangFlyweightUtil.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
package uk.co.real_logic.sbe.generation.golang.flyweight;
1717

1818
import uk.co.real_logic.sbe.PrimitiveType;
19-
import uk.co.real_logic.sbe.SbeTool;
20-
import uk.co.real_logic.sbe.ValidationUtil;
19+
import uk.co.real_logic.sbe.generation.golang.struct.GolangUtil;
2120

2221
import java.nio.ByteOrder;
2322
import java.util.EnumMap;
@@ -105,23 +104,7 @@ public static String golangMarshalType(final PrimitiveType primitiveType)
105104
*/
106105
public static String formatPropertyName(final String value)
107106
{
108-
String formattedValue = toUpperFirstChar(value);
109-
110-
if (ValidationUtil.isGolangKeyword(formattedValue))
111-
{
112-
final String keywordAppendToken = System.getProperty(SbeTool.KEYWORD_APPEND_TOKEN);
113-
if (null == keywordAppendToken)
114-
{
115-
throw new IllegalStateException(
116-
"Invalid property name='" + formattedValue +
117-
"' please correct the schema or consider setting system property: " +
118-
SbeTool.KEYWORD_APPEND_TOKEN);
119-
}
120-
121-
formattedValue += keywordAppendToken;
122-
}
123-
124-
return formattedValue;
107+
return GolangUtil.formatPropertyName(value);
125108
}
126109

127110
/**

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/struct/GolangGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1411,7 +1411,7 @@ private void generateVarData(
14111411
throw new IllegalStateException("tokens must begin with BEGIN_VAR_DATA: token=" + token);
14121412
}
14131413

1414-
final String propertyName = toUpperFirstChar(token.name());
1414+
final String propertyName = formatPropertyName(token.name());
14151415
final Token lengthToken = Generators.findFirst("length", tokens, i);
14161416
final int lengthOfLengthField = lengthToken.encodedLength();
14171417
final Token varDataToken = Generators.findFirst("varData", tokens, i);

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

Lines changed: 82 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
id="6"
55
version="0"
66
semanticVersion="5.2"
7-
description="Example schema"
7+
description="Code generation schema"
88
byteOrder="littleEndian">
99
<types>
1010
<type name="CharArray9" primitiveType="char" length="9" />
@@ -102,67 +102,88 @@
102102
<data name="activationCode" id="20" type="varStringEncoding"/>
103103
<data name="color" id="21" type="varAsciiStringEncoding"/>
104104
</sbe:message>
105-
<sbe:message name="Keywords" id="2">
106-
<field name="Abstract" id="1" type="int8"/>
107-
<field name="assert" id="2" type="int8"/>
108-
<field name="boolean" id="3" type="int8"/>
109-
<field name="break" id="4" type="int8"/>
110-
<field name="byte" id="5" type="int8"/>
111-
<field name="case" id="6" type="int8"/>
112-
<field name="catch" id="7" type="int8"/>
113-
<field name="char" id="8" type="int8"/>
114-
<field name="class" id="9" type="int8"/>
115-
<field name="const" id="10" type="int8"/>
116-
<field name="continue" id="11" type="int8"/>
117-
<field name="default" id="12" type="int8"/>
118-
<field name="do" id="13" type="int8"/>
119-
<field name="double" id="14" type="int8"/>
120-
<field name="else" id="15" type="int8"/>
121-
<field name="enum" id="16" type="int8"/>
122-
<field name="extends" id="17" type="int8"/>
123-
<field name="final" id="18" type="int8"/>
124-
<field name="finally" id="19" type="int8"/>
125-
<field name="float" id="20" type="int8"/>
126-
<field name="for" id="21" type="int8"/>
127-
<field name="goto" id="22" type="int8"/>
128-
<field name="if" id="23" type="int8"/>
129-
<field name="implements" id="24" type="int8"/>
130-
<field name="Import" id="25" type="CharArray9"/>
131-
<field name="instanceof" id="26" type="int8"/>
132-
<field name="int" id="27" type="int8"/>
133-
<field name="interface" id="28" type="int8"/>
134-
<field name="long" id="29" type="int8"/>
135-
<field name="native" id="30" type="int8"/>
136-
<field name="new" id="31" type="int8"/>
137-
<field name="package" id="32" type="int8"/>
138-
<field name="private" id="33" type="int8"/>
139-
<field name="protected" id="34" type="int8"/>
140-
<field name="public" id="35" type="int8"/>
141-
<field name="return" id="36" type="int8"/>
142-
<field name="short" id="37" type="int8"/>
143-
<field name="static" id="38" type="int8"/>
144-
<field name="strictfp" id="39" type="CharArray9"/>
145-
<field name="super" id="40" type="int8"/>
146-
<field name="switch" id="41" type="int8"/>
147-
<field name="synchronized" id="42" type="int8"/>
148-
<field name="this" id="43" type="int8"/>
149-
<field name="throw" id="44" type="int8"/>
150-
<field name="throws" id="45" type="int8"/>
151-
<field name="transient" id="46" type="int8"/>
152-
<field name="try" id="47" type="int8"/>
153-
<field name="void" id="48" type="Buffer"/>
154-
<field name="volatile" id="49" type="int8"/>
155-
<field name="while" id="50" type="int8"/>
156-
<field name="true" id="52" type="ArrayPair"/>
157-
<field name="false" id="53" type="int8"/>
158-
<field name="_" id="54" type="Break"/>
159-
<field name="falsE" id="55" type="int8"/>
160-
<group name="data" id="56" dimensionType="groupSizeEncoding">
161-
<field name="this" id="57" type="Ron"/>
162-
<group name="super" id="58" dimensionType="groupSizeEncoding">
163-
<field name="mph" id="59" type="uint16"/>
164-
<field name="try" id="60" type="float"/>
105+
<sbe:message name="GlobalKeywords" id="2">
106+
<field name="Abstract" id="1" type="int8"/>
107+
<field name="assert" id="2" type="int8"/>
108+
<field name="boolean" id="3" type="int8"/>
109+
<field name="break" id="4" type="int8"/>
110+
<field name="byte" id="5" type="int8"/>
111+
<field name="case" id="6" type="int8"/>
112+
<field name="catch" id="7" type="int8"/>
113+
<field name="char" id="8" type="int8"/>
114+
<field name="class" id="9" type="int8"/>
115+
<field name="const" id="10" type="int8"/>
116+
<field name="continue" id="11" type="int8"/>
117+
<field name="default" id="12" type="int8"/>
118+
<field name="do" id="13" type="int8"/>
119+
<field name="double" id="14" type="int8"/>
120+
<field name="else" id="15" type="int8"/>
121+
<field name="enum" id="16" type="int8"/>
122+
<field name="extends" id="17" type="int8"/>
123+
<field name="final" id="18" type="int8"/>
124+
<field name="finally" id="19" type="int8"/>
125+
<field name="float" id="20" type="int8"/>
126+
<field name="for" id="21" type="int8"/>
127+
<field name="goto" id="22" type="int8"/>
128+
<field name="if" id="23" type="int8"/>
129+
<field name="implements" id="24" type="int8"/>
130+
<field name="Import" id="25" type="CharArray9"/>
131+
<field name="instanceof" id="26" type="int8"/>
132+
<field name="int" id="27" type="int8"/>
133+
<field name="interface" id="28" type="int8"/>
134+
<field name="long" id="29" type="int8"/>
135+
<field name="native" id="30" type="int8"/>
136+
<field name="new" id="31" type="int8"/>
137+
<field name="private" id="33" type="int8"/>
138+
<field name="protected" id="34" type="int8"/>
139+
<field name="public" id="35" type="int8"/>
140+
<field name="return" id="36" type="int8"/>
141+
<field name="short" id="37" type="int8"/>
142+
<field name="static" id="38" type="int8"/>
143+
<field name="strictfp" id="39" type="CharArray9"/>
144+
<field name="super" id="40" type="int8"/>
145+
<field name="switch" id="41" type="int8"/>
146+
<field name="synchronized" id="42" type="int8"/>
147+
<field name="this" id="43" type="int8"/>
148+
<field name="throw" id="44" type="int8"/>
149+
<field name="throws" id="45" type="int8"/>
150+
<field name="transient" id="46" type="int8"/>
151+
<field name="try" id="47" type="int8"/>
152+
<field name="void" id="48" type="Buffer"/>
153+
<field name="volatile" id="49" type="int8"/>
154+
<field name="while" id="50" type="int8"/>
155+
<field name="true" id="52" type="ArrayPair"/>
156+
<field name="false" id="53" type="int8"/>
157+
<field name="_" id="54" type="Break"/>
158+
<field name="falsE" id="55" type="int8"/>
159+
<field name="func" id="56" type="uint16"/>
160+
<field name="string" id="57" type="int64"/>
161+
<field name="length" id="58" type="int64"/>
162+
<field name="size" id="59" type="int64"/>
163+
<field name="nil" id="60" type="int64"/>
164+
<field name="panic" id="61" type="int64"/>
165+
<field name="uint" id="62" type="int64"/>
166+
<field name="uint8" id="63" type="int64"/>
167+
<field name="uint16" id="64" type="int64"/>
168+
<field name="uint32" id="65" type="int64"/>
169+
<field name="uint64" id="66" type="int64"/>
170+
<field name="delete" id="67" type="int64"/>
171+
<field name="iota" id="68" type="int64"/>
172+
<field name="close" id="69" type="int64"/>
173+
<field name="defer" id="70" type="int64"/>
174+
<field name="struct" id="71" type="int64"/>
175+
<field name="Make" id="72" type="int64"/>
176+
<field name="type" id="73" type="uint8"/>
177+
<group name="data" id="90" dimensionType="groupSizeEncoding">
178+
<field name="this" id="91" type="Ron"/>
179+
<group name="super" id="92" dimensionType="groupSizeEncoding">
180+
<field name="mph" id="93" type="uint16"/>
181+
<field name="try" id="94" type="float"/>
182+
<field name="defer" id="95" type="float"/>
165183
</group>
166184
</group>
185+
<data name="go" id="100" type="varStringEncoding"/>
186+
<data name="package" id="101" type="varStringEncoding"/>
187+
<data name="var" id="102" type="varAsciiStringEncoding"/>
167188
</sbe:message>
168189
</sbe:messageSchema>

0 commit comments

Comments
 (0)