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
This commit is contained in:
parent
d4bb580f1b
commit
314a302933
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user