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 e40a02c6a1..eb90237170 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 @@ -3074,7 +3074,8 @@ private void generateEnumDecoder( if (fieldToken.isConstantEncoding()) { - final String enumValueStr = fieldToken.encoding().constValue().toString(); + final String enumValueStr = formatClassName( + fieldToken.encoding().constValue().toString()); new Formatter(sb).format( "\n" + diff --git a/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/ValueRefWithLowerCaseEnum.java b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/ValueRefWithLowerCaseEnum.java new file mode 100644 index 0000000000..98cdf3852b --- /dev/null +++ b/sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/ValueRefWithLowerCaseEnum.java @@ -0,0 +1,69 @@ +/* + * Copyright 2013-2023 Real Logic Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package uk.co.real_logic.sbe.generation.java; + +import org.agrona.DirectBuffer; +import org.agrona.MutableDirectBuffer; +import org.agrona.generation.StringWriterOutputManager; +import org.junit.jupiter.api.Test; +import uk.co.real_logic.sbe.Tests; +import uk.co.real_logic.sbe.ir.Ir; +import uk.co.real_logic.sbe.xml.IrGenerator; +import uk.co.real_logic.sbe.xml.MessageSchema; +import uk.co.real_logic.sbe.xml.ParserOptions; +import uk.co.real_logic.sbe.xml.XmlSchemaParser; + +import java.io.InputStream; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.StringContains.containsString; + +class ValueRefWithLowerCaseEnum +{ + private static final Class BUFFER_CLASS = MutableDirectBuffer.class; + private static final String BUFFER_NAME = BUFFER_CLASS.getName(); + private static final Class READ_ONLY_BUFFER_CLASS = DirectBuffer.class; + private static final String READ_ONLY_BUFFER_NAME = READ_ONLY_BUFFER_CLASS.getName(); + + @Test + void shouldGenerateConstCharArrayMethods() throws Exception + { + try (InputStream in = Tests.getLocalResource("value-ref-with-lower-case-enum.xml")) + { + final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); + final MessageSchema schema = XmlSchemaParser.parse(in, options); + final IrGenerator irg = new IrGenerator(); + final Ir ir = irg.generate(schema); + + final StringWriterOutputManager outputManager = new StringWriterOutputManager(); + outputManager.setPackageName(ir.applicableNamespace()); + final JavaGenerator generator = new JavaGenerator( + ir, BUFFER_NAME, READ_ONLY_BUFFER_NAME, false, false, false, outputManager); + + generator.generate(); + final String sources = outputManager.getSources().toString(); + + // Prior to the fix the generated body of the following method was + // `return engineType.gas;` + final String expected = + " public EngineType engineType()\n" + + " {\n" + + " return EngineType.gas;\n" + + " }"; + assertThat(sources, containsString(expected)); + } + } +} diff --git a/sbe-tool/src/test/resources/value-ref-with-lower-case-enum.xml b/sbe-tool/src/test/resources/value-ref-with-lower-case-enum.xml new file mode 100644 index 0000000000..c33b4133c8 --- /dev/null +++ b/sbe-tool/src/test/resources/value-ref-with-lower-case-enum.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + 0 + + + + + + +