| Index: third_party/protobuf/src/google/protobuf/compiler/java/java_field.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/java/java_field.cc b/third_party/protobuf/src/google/protobuf/compiler/java/java_field.cc
|
| index 978c8f336909ae43317b548a423147ade7a74db8..c7d433c8efa2fd620eaf1c57aa32ce503fc5d776 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/java/java_field.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/java/java_field.cc
|
| @@ -37,6 +37,7 @@
|
| #include <google/protobuf/compiler/java/java_primitive_field.h>
|
| #include <google/protobuf/compiler/java/java_enum_field.h>
|
| #include <google/protobuf/compiler/java/java_message_field.h>
|
| +#include <google/protobuf/compiler/java/java_string_field.h>
|
| #include <google/protobuf/stubs/common.h>
|
|
|
| namespace google {
|
| @@ -63,33 +64,57 @@ FieldGeneratorMap::FieldGeneratorMap(const Descriptor* descriptor)
|
| extension_generators_(
|
| new scoped_ptr<FieldGenerator>[descriptor->extension_count()]) {
|
|
|
| - // Construct all the FieldGenerators.
|
| + // Construct all the FieldGenerators and assign them bit indices for their
|
| + // bit fields.
|
| + int messageBitIndex = 0;
|
| + int builderBitIndex = 0;
|
| for (int i = 0; i < descriptor->field_count(); i++) {
|
| - field_generators_[i].reset(MakeGenerator(descriptor->field(i)));
|
| + FieldGenerator* generator = MakeGenerator(descriptor->field(i),
|
| + messageBitIndex, builderBitIndex);
|
| + field_generators_[i].reset(generator);
|
| + messageBitIndex += generator->GetNumBitsForMessage();
|
| + builderBitIndex += generator->GetNumBitsForBuilder();
|
| }
|
| for (int i = 0; i < descriptor->extension_count(); i++) {
|
| - extension_generators_[i].reset(MakeGenerator(descriptor->extension(i)));
|
| + FieldGenerator* generator = MakeGenerator(descriptor->extension(i),
|
| + messageBitIndex, builderBitIndex);
|
| + extension_generators_[i].reset(generator);
|
| + messageBitIndex += generator->GetNumBitsForMessage();
|
| + builderBitIndex += generator->GetNumBitsForBuilder();
|
| }
|
| }
|
|
|
| -FieldGenerator* FieldGeneratorMap::MakeGenerator(const FieldDescriptor* field) {
|
| +FieldGenerator* FieldGeneratorMap::MakeGenerator(
|
| + const FieldDescriptor* field, int messageBitIndex, int builderBitIndex) {
|
| if (field->is_repeated()) {
|
| switch (GetJavaType(field)) {
|
| case JAVATYPE_MESSAGE:
|
| - return new RepeatedMessageFieldGenerator(field);
|
| + return new RepeatedMessageFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| case JAVATYPE_ENUM:
|
| - return new RepeatedEnumFieldGenerator(field);
|
| + return new RepeatedEnumFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| + case JAVATYPE_STRING:
|
| + return new RepeatedStringFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| default:
|
| - return new RepeatedPrimitiveFieldGenerator(field);
|
| + return new RepeatedPrimitiveFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| }
|
| } else {
|
| switch (GetJavaType(field)) {
|
| case JAVATYPE_MESSAGE:
|
| - return new MessageFieldGenerator(field);
|
| + return new MessageFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| case JAVATYPE_ENUM:
|
| - return new EnumFieldGenerator(field);
|
| + return new EnumFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| + case JAVATYPE_STRING:
|
| + return new StringFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| default:
|
| - return new PrimitiveFieldGenerator(field);
|
| + return new PrimitiveFieldGenerator(
|
| + field, messageBitIndex, builderBitIndex);
|
| }
|
| }
|
| }
|
|
|