From 6314e2922300cea39e3c41408d0bc150f51992ec Mon Sep 17 00:00:00 2001 From: mjpt777 Date: Tue, 5 Feb 2019 18:59:52 +0000 Subject: [PATCH] [C++] Don't generate id methods when in a composite. Issue #640. --- .../sbe/generation/cpp/CppGenerator.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java index 05a3c1bf07..3c456a108e 100755 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java @@ -132,7 +132,7 @@ public void generate() throws IOException collectVarData(messageBody, i, varData); final StringBuilder sb = new StringBuilder(); - out.append(generateFields(className, fields, BASE_INDENT)); + out.append(generateFields(className, fields, BASE_INDENT, false)); generateGroups(sb, groups, BASE_INDENT); out.append(sb); out.append(generateVarData(className, varData, BASE_INDENT)); @@ -164,7 +164,7 @@ private void generateGroups(final StringBuilder sb, final List tokens, fi final List fields = new ArrayList<>(); i = collectFields(tokens, i, fields); - sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT)); + sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT, false)); final List groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); @@ -976,7 +976,7 @@ private CharSequence generateCompositePropertyElements( final String propertyName = formatPropertyName(fieldToken.name()); generateFieldMetaAttributeMethod(sb, fieldToken, indent); - generateFieldCommonMethods(indent, sb, fieldToken, fieldToken, propertyName); + generateFieldCommonMethods(indent, sb, fieldToken, fieldToken, propertyName, true); switch (fieldToken.signal()) { @@ -1669,7 +1669,8 @@ private CharSequence generateMessageFlyweightCode(final String className, final generateConstructorsAndOperators(className)); } - private CharSequence generateFields(final String containingClassName, final List tokens, final String indent) + private CharSequence generateFields( + final String containingClassName, final List tokens, final String indent, final boolean inComposite) { final StringBuilder sb = new StringBuilder(); @@ -1682,7 +1683,7 @@ private CharSequence generateFields(final String containingClassName, final List final String propertyName = formatPropertyName(signalToken.name()); generateFieldMetaAttributeMethod(sb, signalToken, indent); - generateFieldCommonMethods(indent, sb, signalToken, encodingToken, propertyName); + generateFieldCommonMethods(indent, sb, signalToken, encodingToken, propertyName, inComposite); switch (encodingToken.signal()) { @@ -1714,15 +1715,19 @@ private void generateFieldCommonMethods( final StringBuilder sb, final Token fieldToken, final Token encodingToken, - final String propertyName) + final String propertyName, + final boolean inComposite) { - sb.append(String.format("\n" + - indent + " static SBE_CONSTEXPR std::uint16_t %1$sId() SBE_NOEXCEPT\n" + - indent + " {\n" + - indent + " return %2$d;\n" + - indent + " }\n", - propertyName, - fieldToken.id())); + if (!inComposite) + { + sb.append(String.format("\n" + + indent + " static SBE_CONSTEXPR std::uint16_t %1$sId() SBE_NOEXCEPT\n" + + indent + " {\n" + + indent + " return %2$d;\n" + + indent + " }\n", + propertyName, + fieldToken.id())); + } sb.append(String.format("\n" + indent + " static SBE_CONSTEXPR std::uint64_t %1$sSinceVersion() SBE_NOEXCEPT\n" +