diff options
Diffstat (limited to 'src/google/protobuf/reflection_ops.cc')
-rw-r--r-- | src/google/protobuf/reflection_ops.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/google/protobuf/reflection_ops.cc b/src/google/protobuf/reflection_ops.cc index 897c0d7..8993a24 100644 --- a/src/google/protobuf/reflection_ops.cc +++ b/src/google/protobuf/reflection_ops.cc @@ -32,8 +32,12 @@ // Based on original Protocol Buffers design by // Sanjay Ghemawat, Jeff Dean, and others. +#include <string> +#include <vector> + #include <google/protobuf/reflection_ops.h> #include <google/protobuf/descriptor.h> +#include <google/protobuf/descriptor.pb.h> #include <google/protobuf/unknown_field_set.h> #include <google/protobuf/stubs/strutil.h> @@ -52,7 +56,9 @@ void ReflectionOps::Merge(const Message& from, Message* to) { const Descriptor* descriptor = from.GetDescriptor(); GOOGLE_CHECK_EQ(to->GetDescriptor(), descriptor) - << "Tried to merge messages of different types."; + << "Tried to merge messages of different types " + << "(merge " << descriptor->full_name() + << " to " << to->GetDescriptor()->full_name() << ")"; const Reflection* from_reflection = from.GetReflection(); const Reflection* to_reflection = to->GetReflection(); @@ -151,11 +157,12 @@ bool ReflectionOps::IsInitialized(const Message& message) { for (int i = 0; i < fields.size(); i++) { const FieldDescriptor* field = fields[i]; if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { + if (field->is_repeated()) { int size = reflection->FieldSize(message, field); - for (int i = 0; i < size; i++) { - if (!reflection->GetRepeatedMessage(message, field, i) + for (int j = 0; j < size; j++) { + if (!reflection->GetRepeatedMessage(message, field, j) .IsInitialized()) { return false; } @@ -183,8 +190,8 @@ void ReflectionOps::DiscardUnknownFields(Message* message) { if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) { if (field->is_repeated()) { int size = reflection->FieldSize(*message, field); - for (int i = 0; i < size; i++) { - reflection->MutableRepeatedMessage(message, field, i) + for (int j = 0; j < size; j++) { + reflection->MutableRepeatedMessage(message, field, j) ->DiscardUnknownFields(); } } else { @@ -240,11 +247,11 @@ void ReflectionOps::FindInitializationErrors( if (field->is_repeated()) { int size = reflection->FieldSize(message, field); - for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) { const Message& sub_message = - reflection->GetRepeatedMessage(message, field, i); + reflection->GetRepeatedMessage(message, field, j); FindInitializationErrors(sub_message, - SubMessagePrefix(prefix, field, i), + SubMessagePrefix(prefix, field, j), errors); } } else { |