Oops, sorry about that. Somehow I had gotten mixed up and thought this was our Google-internal mailing list, so that would explain why the link was not accessible.
void SetMapEntry(google::protobuf::Message* entry) {
const google::protobuf::FieldDescriptor* key_field =
entry->GetDescriptor()->FindFieldByNumber(1);
const google::protobuf::FieldDescriptor* value_field =
entry->GetDescriptor()->FindFieldByNumber(2);
const google::protobuf::Reflection* reflection = entry->GetReflection();
reflection->SetString(entry, key_field, "xyz");
reflection->SetInt32(entry, value_field, 123);
}
TEST(MapReflectionTest, MapReflection) {
MapMessage message;
const google::protobuf::FieldDescriptor* repeated_field =
message.GetDescriptor()->FindFieldByName("name_to_number");
const google::protobuf::Reflection* reflection = message.GetReflection();
google::protobuf::MutableRepeatedFieldRef<google::protobuf::Message>
repeated_ref =
reflection->GetMutableRepeatedFieldRef<google::protobuf::Message>(
&message, repeated_field);
std::unique_ptr<google::protobuf::Message> entry(repeated_ref.NewMessage());
SetMapEntry(entry.get());
repeated_ref.Add(*entry);
EXPECT_EQ(1, message.name_to_number().size());
EXPECT_EQ(123, message.name_to_number().at("xyz"));
}