Skip to content

Commit 244a587

Browse files
committed
[Java] Check for var data when requiring imports needs to consider nested var data in groups.
1 parent 63a2e7e commit 244a587

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ public void generate() throws IOException
171171
{
172172
final Token msgToken = tokens.get(0);
173173
final List<Token> messageBody = getMessageBody(tokens);
174+
final boolean hasVarData = -1 != findSignal(messageBody, Signal.BEGIN_VAR_DATA);
174175

175176
int i = 0;
176177
final List<Token> fields = new ArrayList<>();
@@ -182,21 +183,25 @@ public void generate() throws IOException
182183
final List<Token> varData = new ArrayList<>();
183184
collectVarData(messageBody, i, varData);
184185

185-
generateDecoder(fields, groups, varData, msgToken);
186-
generateEncoder(fields, groups, varData, msgToken);
186+
generateDecoder(msgToken, fields, groups, varData, hasVarData);
187+
generateEncoder(msgToken, fields, groups, varData, hasVarData);
187188
}
188189
}
189190

190191
private void generateEncoder(
191-
final List<Token> fields, final List<Token> groups, final List<Token> varData, final Token msgToken)
192+
final Token msgToken,
193+
final List<Token> fields,
194+
final List<Token> groups,
195+
final List<Token> varData,
196+
final boolean hasVarData)
192197
throws IOException
193198
{
194199
final String className = formatClassName(encoderName(msgToken.name()));
195200
final String implementsString = implementsInterface(MessageEncoderFlyweight.class.getSimpleName());
196201

197202
try (Writer out = outputManager.createOutput(className))
198203
{
199-
out.append(generateMainHeader(ir.applicableNamespace(), ENCODER, !varData.isEmpty()));
204+
out.append(generateMainHeader(ir.applicableNamespace(), ENCODER, hasVarData));
200205

201206
generateAnnotations(BASE_INDENT, className, groups, out, 0, this::encoderName);
202207
out.append(generateDeclaration(className, implementsString, msgToken));
@@ -215,15 +220,19 @@ private void generateEncoder(
215220
}
216221

217222
private void generateDecoder(
218-
final List<Token> fields, final List<Token> groups, final List<Token> varData, final Token msgToken)
223+
final Token msgToken,
224+
final List<Token> fields,
225+
final List<Token> groups,
226+
final List<Token> varData,
227+
final boolean hasVarData)
219228
throws IOException
220229
{
221230
final String className = formatClassName(decoderName(msgToken.name()));
222231
final String implementsString = implementsInterface(MessageDecoderFlyweight.class.getSimpleName());
223232

224233
try (Writer out = outputManager.createOutput(className))
225234
{
226-
out.append(generateMainHeader(ir.applicableNamespace(), DECODER, !varData.isEmpty()));
235+
out.append(generateMainHeader(ir.applicableNamespace(), DECODER, hasVarData));
227236

228237
generateAnnotations(BASE_INDENT, className, groups, out, 0, this::decoderName);
229238
out.append(generateDeclaration(className, implementsString, msgToken));

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,17 @@ public static List<String> findSubGroupNames(final List<Token> tokens)
107107

108108
return groupNames;
109109
}
110+
111+
public static int findSignal(final List<Token> tokens, final Signal signal)
112+
{
113+
for (int i = 0, endIndex = tokens.size() - 1; i < endIndex; i++)
114+
{
115+
if (signal == tokens.get(i).signal())
116+
{
117+
return i;
118+
}
119+
}
120+
121+
return -1;
122+
}
110123
}

0 commit comments

Comments
 (0)