|
@@ -1482,18 +1482,35 @@ class LazyAccessor {
|
|
* @private
|
|
* @private
|
|
*/
|
|
*/
|
|
getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot) {
|
|
getRepeatedMessageArray_(fieldNumber, instanceCreator, pivot) {
|
|
|
|
+ // This method can be shortened using getFieldWithDefault and
|
|
|
|
+ // getRepeatedNonPrimitive methods. But that will require creating and
|
|
|
|
+ // passing a reader closure every time getRepeatedMessageArray_ is called,
|
|
|
|
+ // which is expensive.
|
|
checkInstanceCreator(instanceCreator);
|
|
checkInstanceCreator(instanceCreator);
|
|
- const bytesInstanceCreator = (bufferDecoder) =>
|
|
|
|
- instanceCreator(LazyAccessor.fromBufferDecoder_(bufferDecoder, pivot));
|
|
|
|
- const readMessageFunc = (bufferDecoder, start) =>
|
|
|
|
- bytesInstanceCreator(reader.readDelimited(bufferDecoder, start));
|
|
|
|
|
|
+ checkFieldNumber(fieldNumber);
|
|
|
|
|
|
- const readRepeatedMessageFunc = (indexArray, bufferDecoder) =>
|
|
|
|
- readRepeatedNonPrimitive(indexArray, bufferDecoder, readMessageFunc);
|
|
|
|
- const encoder = (writer, fieldNumber, values) =>
|
|
|
|
- writeRepeatedMessage(writer, fieldNumber, values);
|
|
|
|
- return this.getFieldWithDefault_(
|
|
|
|
- fieldNumber, /* defaultValue= */[], readRepeatedMessageFunc, encoder);
|
|
|
|
|
|
+ const field = this.fields_.get(fieldNumber);
|
|
|
|
+ if (field === undefined) {
|
|
|
|
+ return [];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (field.hasDecodedValue()) {
|
|
|
|
+ return field.getDecodedValue();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const indexArray = checkDefAndNotNull(field.getIndexArray());
|
|
|
|
+ const result = new Array(indexArray.length);
|
|
|
|
+ for (let i = 0; i < indexArray.length; i++) {
|
|
|
|
+ validateWireType(indexArray[i], WireType.DELIMITED);
|
|
|
|
+ const subMessageBuffer = reader.readDelimited(
|
|
|
|
+ checkDefAndNotNull(this.bufferDecoder_),
|
|
|
|
+ Field.getStartIndex(indexArray[i]));
|
|
|
|
+ result[i] = instanceCreator(
|
|
|
|
+ LazyAccessor.fromBufferDecoder_(subMessageBuffer, pivot));
|
|
|
|
+ }
|
|
|
|
+ field.setCache(result, writeRepeatedMessage);
|
|
|
|
+
|
|
|
|
+ return result;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|