|
@@ -367,7 +367,19 @@ public class RubyMessage extends RubyObject {
|
|
|
for (Descriptors.FieldDescriptor fdef : this.descriptor.getFields()) {
|
|
|
IRubyObject value = getField(context, fdef);
|
|
|
if (!value.isNil()) {
|
|
|
- if (value.respondsTo("to_h")) {
|
|
|
+ if (fdef.isRepeated() && !fdef.isMapField()) {
|
|
|
+ if (fdef.getType() != Descriptors.FieldDescriptor.Type.MESSAGE) {
|
|
|
+ value = Helpers.invoke(context, value, "to_a");
|
|
|
+ } else {
|
|
|
+ RubyArray ary = value.convertToArray();
|
|
|
+ for (int i = 0; i < ary.size(); i++) {
|
|
|
+ IRubyObject submsg = Helpers.invoke(context, ary.eltInternal(i), "to_h");
|
|
|
+ ary.eltInternalSet(i, submsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ value = ary.to_ary();
|
|
|
+ }
|
|
|
+ } else if (value.respondsTo("to_h")) {
|
|
|
value = Helpers.invoke(context, value, "to_h");
|
|
|
} else if (value.respondsTo("to_a")) {
|
|
|
value = Helpers.invoke(context, value, "to_a");
|