From 0eab64e723431eb2b09a1bff8741a2977bec0188 Mon Sep 17 00:00:00 2001 From: Aymen Jamaaoui Date: Mon, 7 Sep 2026 17:17:56 +0200 Subject: [PATCH 1/2] Add setRaw() method for Set type encoder (#1086)" --- .../sbe/generation/java/JavaGenerator.java | 14 ++++++++- .../generation/java/JavaGeneratorTest.java | 29 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) 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 7c14607d6a..02ee6d4406 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 @@ -1902,11 +1902,11 @@ private void generateBitSet(final List tokens) throws IOException final String encoderName = encoderName(bitSetName); final List choiceList = tokens.subList(1, tokens.size() - 1); final String implementsString = implementsInterface(Flyweight.class.getSimpleName()); + final Encoding encoding = token.encoding(); registerTypesPackageName(token, ir); try (Writer out = outputManager.createOutput(decoderName)) { - final Encoding encoding = token.encoding(); generateFixedFlyweightHeader( out, token, decoderName, implementsString, readOnlyBuffer, fqReadOnlyBuffer, PACKAGES_EMPTY_SET); out.append(generateChoiceIsEmpty(encoding.primitiveType())); @@ -1931,6 +1931,18 @@ private void generateBitSet(final List tokens) throws IOException generateFixedFlyweightHeader( out, token, encoderName, implementsString, mutableBuffer, fqMutableBuffer, PACKAGES_EMPTY_SET); generateChoiceClear(out, encoderName, token); + + new Formatter(out).format( + "\n" + + " public %s setRaw(final %s value)\n" + + " {\n" + + " %s;\n" + + " return this;\n" + + " }\n", + encoderName, + primitiveTypeName(token), + generatePut(encoding.primitiveType(), "offset", "value", byteOrderString(encoding))); + generateChoiceEncoders(out, encoderName, choiceList); out.append("}\n"); } diff --git a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java index e5d4a1f5a1..133a7b38fa 100644 --- a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java +++ b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java @@ -382,6 +382,35 @@ void shouldGenerateBitSetCodecs() throws Exception assertTrue(getCruiseControl(extrasDecoder)); } + @Test + void shouldGenerateBitSetRawAccessor() throws Exception + { + final UnsafeBuffer buffer = new UnsafeBuffer(new byte[4096]); + + generator().generate(); + + final Object encoder = wrap(buffer, compileCarEncoder().getConstructor().newInstance()); + final Object decoder = getCarDecoder(buffer, encoder); + + final Object extrasEncoder = getExtras(encoder); + final Object extrasDecoder = getExtras(decoder); + + final Method getRawMethod = extrasDecoder.getClass().getMethod("getRaw"); + final Class rawType = getRawMethod.getReturnType(); + final Method setRawMethod = extrasEncoder.getClass().getMethod("setRaw", rawType); + + final byte rawValue = (byte)0b0000_0101; + final Object boxedValue = + rawType == byte.class ? (Object)rawValue : + rawType == short.class ? (Object)(short)rawValue : + (Object)(int)rawValue; + + setRawMethod.invoke(extrasEncoder, boxedValue); + + final Object result = getRawMethod.invoke(extrasDecoder); + assertEquals(rawValue, ((Number)result).byteValue()); + } + @Test void shouldGenerateEnumCodecs() throws Exception { From 72a5e12aaee41673c9e7c3cea6bf502f14b70f15 Mon Sep 17 00:00:00 2001 From: aymen Date: Wed, 9 Sep 2026 17:44:08 +0200 Subject: [PATCH 2/2] Simplify shouldGenerateBitSetRawAccessor test per review feedback --- .../sbe/generation/java/JavaGeneratorTest.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java index 133a7b38fa..0b18c32ff1 100644 --- a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java +++ b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java @@ -399,16 +399,11 @@ void shouldGenerateBitSetRawAccessor() throws Exception final Class rawType = getRawMethod.getReturnType(); final Method setRawMethod = extrasEncoder.getClass().getMethod("setRaw", rawType); - final byte rawValue = (byte)0b0000_0101; - final Object boxedValue = - rawType == byte.class ? (Object)rawValue : - rawType == short.class ? (Object)(short)rawValue : - (Object)(int)rawValue; - + final Short boxedValue = (short)0b0000_0101; setRawMethod.invoke(extrasEncoder, boxedValue); final Object result = getRawMethod.invoke(extrasDecoder); - assertEquals(rawValue, ((Number)result).byteValue()); + assertEquals(boxedValue, result); } @Test