|
|
|
@ -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"); |
|
|
|
|