Thanks @harel for the answer, you can also set the key/value on the MapEntry
without casting it by setting the fields using the field numbers:
if (field.isMapField()) {
Descriptors.Descriptor messageType = field.getMessageType();
// see com.google.protobuf.MapEntryLite for field numbers
Descriptors.FieldDescriptor keyField = messageType.findFieldByNumber(KEY_FIELD_NUMBER); // KEY_FIELD_NUMBER = 1
Descriptors.FieldDescriptor valueField = messageType.findFieldByNumber(VALUE_FIELD_NUMBER); // VALUE_FIELD_NUMBER = 2
Message.Builder entryBuilder = builder.newBuilderForField(field);
entryBuilder.setField(keyField, key);
entryBuilder.setField(valueField, value);
builder.addRepeatedField(field, entryBuilder.build());
}