Skip to content

Commit 4e89da2

Browse files
committed
[Java] Adjust Java Dto generateComputeEncodedLength to acount for character encoding (#1072)
1 parent f64751b commit 4e89da2

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaDtoGenerator.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -371,14 +371,20 @@ private void generateComputeEncodedLength(
371371
.append(formatPropertyName(propertyName)).append("HeaderLength();\n");
372372

373373
final String characterEncoding = varDataToken.encoding().characterEncoding();
374-
final String lengthAccessor = characterEncoding == null ? ".length" : ".length()";
375-
lengthBuilder.append(indent).append(INDENT).append("encodedLength += ")
376-
.append("this.").append(fieldName).append(lengthAccessor);
374+
lengthBuilder.append(indent).append(INDENT).append("encodedLength += ");
377375

378-
final int elementByteLength = varDataToken.encoding().primitiveType().size();
379-
if (elementByteLength != 1)
376+
if (characterEncoding == null)
377+
{
378+
lengthBuilder.append("this.").append(fieldName).append(".length");
379+
}
380+
else if (JavaUtil.isAsciiEncoding(characterEncoding))
381+
{
382+
lengthBuilder.append("this.").append(fieldName).append(".length()");
383+
}
384+
else
380385
{
381-
lengthBuilder.append(" * ").append(elementByteLength);
386+
lengthBuilder.append("this.").append(fieldName)
387+
.append(".getBytes(").append(JavaUtil.charset(characterEncoding)).append(").length");
382388
}
383389

384390
lengthBuilder.append(";\n\n");

0 commit comments

Comments
 (0)