|
36 | 36 | import static uk.co.real_logic.sbe.generation.java.JavaUtil.*; |
37 | 37 | import static uk.co.real_logic.sbe.ir.GenerationUtil.*; |
38 | 38 |
|
| 39 | +@SuppressWarnings("MethodLength") |
39 | 40 | public class JavaGenerator implements CodeGenerator |
40 | 41 | { |
41 | 42 | enum CodecType |
@@ -910,26 +911,16 @@ private void generateDataDecodeMethods( |
910 | 911 | if (characterEncoding.contains("ASCII")) |
911 | 912 | { |
912 | 913 | sb.append(String.format("\n" + |
913 | | - indent + " public void get%1$s(final Appendable value)\n" + |
| 914 | + indent + " public int get%1$s(final Appendable appendable)\n" + |
914 | 915 | indent + " {\n" + |
915 | 916 | "%2$s" + |
916 | 917 | indent + " final int headerLength = %3$d;\n" + |
917 | 918 | indent + " final int limit = parentMessage.limit();\n" + |
918 | 919 | indent + " final int dataLength = (int)%4$s;\n" + |
919 | | - indent + " final int dataOffset = limit + headerLength;\n" + |
| 920 | + indent + " final int dataOffset = limit + headerLength;\n\n" + |
920 | 921 | indent + " parentMessage.limit(dataOffset + dataLength);\n" + |
921 | | - indent + " for (int i = 0; i < dataLength; ++i)\n" + |
922 | | - indent + " {\n" + |
923 | | - indent + " try\n" + |
924 | | - indent + " {\n" + |
925 | | - indent + " final int c = buffer.getByte(dataOffset + i) & 0xFF;\n" + |
926 | | - indent + " value.append(c > 127 ? '?' : (char)c);\n" + |
927 | | - indent + " }\n" + |
928 | | - indent + " catch (final java.io.IOException e)\n" + |
929 | | - indent + " {\n" + |
930 | | - indent + " throw new java.io.UncheckedIOException(e);\n" + |
931 | | - indent + " }\n" + |
932 | | - indent + " }\n" + |
| 922 | + indent + " buffer.getStringWithoutLengthAscii(dataOffset, dataLength, appendable);\n\n" + |
| 923 | + indent + " return dataLength;\n" + |
933 | 924 | indent + " }\n", |
934 | 925 | Generators.toUpperFirstChar(propertyName), |
935 | 926 | generateStringNotPresentConditionForAppendable(token.version(), indent), |
@@ -1898,7 +1889,7 @@ private static CharSequence generateStringNotPresentConditionForAppendable( |
1898 | 1889 | return String.format( |
1899 | 1890 | indent + " if (parentMessage.actingVersion < %d)\n" + |
1900 | 1891 | indent + " {\n" + |
1901 | | - indent + " return;\n" + |
| 1892 | + indent + " return 0;\n" + |
1902 | 1893 | indent + " }\n\n", |
1903 | 1894 | sinceVersion); |
1904 | 1895 | } |
@@ -2010,36 +2001,40 @@ private CharSequence generatePrimitiveArrayPropertyDecode( |
2010 | 2001 | indent + " }\n\n", |
2011 | 2002 | propertyName, |
2012 | 2003 | generateStringNotPresentCondition(propertyToken.version(), indent), |
2013 | | - fieldLength, offset, |
2014 | | - fieldLength, fieldLength, |
| 2004 | + fieldLength, |
| 2005 | + offset, |
| 2006 | + fieldLength, |
| 2007 | + fieldLength, |
2015 | 2008 | charset(encoding.characterEncoding()))); |
2016 | 2009 |
|
2017 | 2010 | if (encoding.characterEncoding().contains("ASCII")) |
2018 | 2011 | { |
2019 | 2012 | sb.append(String.format("\n" + |
2020 | | - indent + " public void get%s(final Appendable value)\n" + |
| 2013 | + indent + " public int get%1$s(final Appendable value)\n" + |
2021 | 2014 | indent + " {\n" + |
2022 | | - "%s" + |
2023 | | - indent + " for (int i = 0; i < %d ; ++i)\n" + |
| 2015 | + "%2$s" + |
| 2016 | + indent + " for (int i = 0; i < %3$d; ++i)\n" + |
2024 | 2017 | indent + " {\n" + |
2025 | | - indent + " final int c = buffer.getByte(this.offset + %d + i) & 0xFF;\n" + |
| 2018 | + indent + " final int c = buffer.getByte(this.offset + %4$d + i) & 0xFF;\n" + |
2026 | 2019 | indent + " if (c == 0)\n" + |
2027 | 2020 | indent + " {\n" + |
2028 | | - indent + " break;\n" + |
2029 | | - indent + " }\n" + |
| 2021 | + indent + " return i;\n" + |
| 2022 | + indent + " }\n\n" + |
2030 | 2023 | indent + " try\n" + |
2031 | 2024 | indent + " {\n" + |
2032 | 2025 | indent + " value.append(c > 127 ? '?' : (char)c);\n" + |
2033 | 2026 | indent + " }\n" + |
2034 | | - indent + " catch (final java.io.IOException e)\n" + |
| 2027 | + indent + " catch (final java.io.IOException ex)\n" + |
2035 | 2028 | indent + " {\n" + |
2036 | | - indent + " throw new java.io.UncheckedIOException(e);\n" + |
| 2029 | + indent + " throw new java.io.UncheckedIOException(ex);\n" + |
2037 | 2030 | indent + " }\n" + |
2038 | | - indent + " }\n" + |
| 2031 | + indent + " }\n\n" + |
| 2032 | + indent + " return %3$d;\n" + |
2039 | 2033 | indent + " }\n\n", |
2040 | 2034 | Generators.toUpperFirstChar(propertyName), |
2041 | 2035 | generateStringNotPresentConditionForAppendable(propertyToken.version(), indent), |
2042 | | - fieldLength, offset)); |
| 2036 | + fieldLength, |
| 2037 | + offset)); |
2043 | 2038 | } |
2044 | 2039 | } |
2045 | 2040 |
|
@@ -2409,8 +2404,6 @@ private CharSequence generateFixedFlyweightCode( |
2409 | 2404 | generateLiteral(ir.headerStructure().schemaVersionType(), Integer.toString(ir.version())), |
2410 | 2405 | schemaIdAccessorType, |
2411 | 2406 | schemaVersionAccessorType); |
2412 | | - |
2413 | | - |
2414 | 2407 | } |
2415 | 2408 |
|
2416 | 2409 | private CharSequence generateDecoderFlyweightCode(final String className, final Token token) |
|
0 commit comments