Commit 314a3029 authored by Ficus Kirkpatrick's avatar Ficus Kirkpatrick

Don't use Arrays.copyOf in generated code.

It didn't appear until API 9 and is thus incompatible with Froyo.
Instead, allocate a new array and System.arraycopy inline.

Change-Id: I2e1cd07a4a762ef8edd5ec06ceaa1d38b302823d
parent d4bb580f
......@@ -166,7 +166,9 @@ GenerateParsingCode(io::Printer* printer) const {
printer->Print(variables_,
"int arrayLength = com.google.protobuf.nano.WireFormatNano.getRepeatedFieldArrayLength(input, $tag$);\n"
"int i = this.$name$.length;\n"
"this.$name$ = java.util.Arrays.copyOf(this.$name$, this.$name$.length + arrayLength);\n"
"int[] newArray = new int[i + arrayLength];\n"
"System.arraycopy(this.$name$, 0, newArray, 0, i);\n"
"this.$name$ = newArray;\n"
"for (; i < this.$name$.length - 1; i++) {\n"
" this.$name$[i] = input.readInt32();\n"
" input.readTag();\n"
......
......@@ -144,7 +144,9 @@ GenerateParsingCode(io::Printer* printer) const {
printer->Print(variables_,
"int arrayLength = com.google.protobuf.nano.WireFormatNano.getRepeatedFieldArrayLength(input, $tag$);\n"
"int i = this.$name$.length;\n"
"this.$name$ = java.util.Arrays.copyOf(this.$name$, i + arrayLength);\n"
"$type$[] newArray = new $type$[i + arrayLength];\n"
"System.arraycopy(this.$name$, 0, newArray, 0, i);\n"
"this.$name$ = newArray;\n"
"for (; i < this.$name$.length - 1; i++) {\n"
" this.$name$[i] = new $type$();\n");
......
......@@ -391,8 +391,20 @@ GenerateParsingCode(io::Printer* printer) const {
} else {
printer->Print(variables_,
"int arrayLength = com.google.protobuf.nano.WireFormatNano.getRepeatedFieldArrayLength(input, $tag$);\n"
"int i = this.$name$.length;\n"
"this.$name$ = java.util.Arrays.copyOf(this.$name$, this.$name$.length + arrayLength);\n"
"int i = this.$name$.length;\n");
if (GetJavaType(descriptor_) == JAVATYPE_BYTES) {
printer->Print(variables_,
"byte[][] newArray = new byte[i + arrayLength][];\n"
"System.arraycopy(this.$name$, 0, newArray, 0, i);\n"
"this.$name$ = newArray;\n");
} else {
printer->Print(variables_,
"$type$[] newArray = new $type$[i + arrayLength];\n"
"System.arraycopy(this.$name$, 0, newArray, 0, i);\n"
"this.$name$ = newArray;\n");
}
printer->Print(variables_,
"for (; i < this.$name$.length - 1; i++) {\n"
" this.$name$[i] = input.read$capitalized_type$();\n"
" input.readTag();\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment