diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java index 4565bd4e82..23ec287720 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java @@ -1052,6 +1052,7 @@ private void generateBitSet(final List tokens) throws IOException try (Writer out = outputManager.createOutput(decoderName)) { generateFixedFlyweightHeader(token, decoderName, out, readOnlyBuffer, fqReadOnlyBuffer); + out.append(generateNoChoicesSet(token.encoding().primitiveType())); out.append(generateChoiceDecoders(messageBody)); out.append(generateChoiceDisplay(messageBody)); out.append("}\n"); @@ -2740,6 +2741,34 @@ private String generatePut( throw new IllegalArgumentException("primitive type not supported: " + type); } + private String generateNoChoicesSet(final PrimitiveType type) + { + return String.format( + "\n public boolean isEmpty()\n" + + " {\n" + + " return %1$s;\n" + + " }\n", generateChoiceUnsetInner(type)); + } + + private String generateChoiceUnsetInner(PrimitiveType type) { + switch (type) + { + case UINT8: + return "0 == buffer.getByte(offset)"; + + case UINT16: + return "0 == buffer.getShort(offset)"; + + case UINT32: + return "0 == buffer.getInt(offset)"; + + case UINT64: + return "0 == buffer.getLong(offset)"; + } + + throw new IllegalArgumentException("primitive type not supported: " + type); + } + private String generateChoiceGet(final PrimitiveType type, final String bitIndex, final String byteOrder) { switch (type)