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 bd277284bd..5c479aedb9 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 @@ -131,8 +131,7 @@ public JavaGenerator( shouldDecodeUnknownEnumValues, shouldSupportTypesPackageNames, PrecedenceChecks.newInstance(new PrecedenceChecks.Context()), - outputManager - ); + outputManager); } /** @@ -1466,7 +1465,7 @@ private void generateDecoderVarData( sb.append("\n") .append(indent).append(" public int ").append(methodPropName).append("Length()\n") .append(indent).append(" {\n") - .append(generateArrayFieldNotPresentCondition(token.version(), indent)) + .append(generateArrayFieldNotPresentCondition(false, token.version(), indent)) .append(lengthAccessOrderListenerCall) .append(indent).append(" final int limit = parentMessage.limit();\n") .append(indent).append(" return ").append(PrimitiveType.UINT32 == lengthType ? "(int)" : "") @@ -1563,7 +1562,7 @@ private void generateDataDecodeMethods( indent + " return dataLength;\n" + indent + " }\n", Generators.toUpperFirstChar(propertyName), - generateStringNotPresentConditionForAppendable(token.version(), indent), + generateStringNotPresentConditionForAppendable(false, token.version(), indent), sizeOfLengthField, PrimitiveType.UINT32 == lengthType ? "(int)" : "", generateGet(lengthType, "limit", byteOrderStr), @@ -1621,7 +1620,7 @@ private void generateDataDecodeMethods( indent + " return new String(tmp, %6$s);\n" + indent + " }\n", formatPropertyName(propertyName), - generateStringNotPresentCondition(token.version(), indent), + generateStringNotPresentCondition(false, token.version(), indent), sizeOfLengthField, PrimitiveType.UINT32 == lengthType ? "(int)" : "", generateGet(lengthType, "limit", byteOrderStr), @@ -1644,7 +1643,7 @@ private void generateDataDecodeMethods( indent + " return dataLength;\n" + indent + " }\n", Generators.toUpperFirstChar(propertyName), - generateStringNotPresentConditionForAppendable(token.version(), indent), + generateStringNotPresentConditionForAppendable(false, token.version(), indent), sizeOfLengthField, PrimitiveType.UINT32 == lengthType ? "(int)" : "", generateGet(lengthType, "limit", byteOrderStr), @@ -1853,7 +1852,7 @@ private void generateVarDataTypedDecoder( indent + " }\n", propertyName, exchangeType, - generateArrayFieldNotPresentCondition(token.version(), indent), + generateArrayFieldNotPresentCondition(false, token.version(), indent), accessOrderListenerCall, sizeOfLengthField, PrimitiveType.UINT32 == lengthType ? "(int)" : "", @@ -2713,9 +2712,10 @@ private CharSequence generateFieldNotPresentCondition( indent + " }\n\n"; } - private static CharSequence generateArrayFieldNotPresentCondition(final int sinceVersion, final String indent) + private static CharSequence generateArrayFieldNotPresentCondition( + final boolean inComposite, final int sinceVersion, final String indent) { - if (0 == sinceVersion) + if (inComposite || 0 == sinceVersion) { return ""; } @@ -2728,9 +2728,9 @@ private static CharSequence generateArrayFieldNotPresentCondition(final int sinc } private static CharSequence generateStringNotPresentConditionForAppendable( - final int sinceVersion, final String indent) + final boolean inComposite, final int sinceVersion, final String indent) { - if (0 == sinceVersion) + if (inComposite || 0 == sinceVersion) { return ""; } @@ -2742,9 +2742,10 @@ private static CharSequence generateStringNotPresentConditionForAppendable( indent + " }\n\n"; } - private static CharSequence generateStringNotPresentCondition(final int sinceVersion, final String indent) + private static CharSequence generateStringNotPresentCondition( + final boolean inComposite, final int sinceVersion, final String indent) { - if (0 == sinceVersion) + if (inComposite || 0 == sinceVersion) { return ""; } @@ -2836,7 +2837,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode( indent + " }\n", Generators.toUpperFirstChar(propertyName), fieldLength, - generateArrayFieldNotPresentCondition(propertyToken.version(), indent), + generateArrayFieldNotPresentCondition(inComposite, propertyToken.version(), indent), accessOrderListenerCall, offset); @@ -2852,7 +2853,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode( indent + " return new String(dst, 0, end, %s);\n" + indent + " }\n\n", propertyName, - generateStringNotPresentCondition(propertyToken.version(), indent), + generateStringNotPresentCondition(inComposite, propertyToken.version(), indent), accessOrderListenerCall, fieldLength, offset, @@ -2886,7 +2887,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode( indent + " return %3$d;\n" + indent + " }\n\n", Generators.toUpperFirstChar(propertyName), - generateStringNotPresentConditionForAppendable(propertyToken.version(), indent), + generateStringNotPresentConditionForAppendable(inComposite, propertyToken.version(), indent), fieldLength, offset, accessOrderListenerCall); @@ -2904,7 +2905,7 @@ else if (encoding.primitiveType() == PrimitiveType.UINT8) indent + " return bytesCopied;\n" + indent + " }\n", Generators.toUpperFirstChar(propertyName), - generateArrayFieldNotPresentCondition(propertyToken.version(), indent), + generateArrayFieldNotPresentCondition(inComposite, propertyToken.version(), indent), accessOrderListenerCall, fieldLength, offset); @@ -2920,7 +2921,7 @@ else if (encoding.primitiveType() == PrimitiveType.UINT8) indent + " }\n", Generators.toUpperFirstChar(propertyName), fqMutableBuffer, - generateArrayFieldNotPresentCondition(propertyToken.version(), indent), + generateArrayFieldNotPresentCondition(inComposite, propertyToken.version(), indent), accessOrderListenerCall, fieldLength, offset);