diff options
author | Josh Haberman <jhaberman@gmail.com> | 2016-05-18 15:39:29 -0700 |
---|---|---|
committer | Josh Haberman <jhaberman@gmail.com> | 2016-05-18 15:39:29 -0700 |
commit | 2d514ce2d8b1f5fb00c6031a1a8e4dab968e4927 (patch) | |
tree | 3fcda3102a191c257fcefefede684f87d9507d56 /ruby/src/main/java | |
parent | 545527e8cfedc43dc6b862af23691affcb1285f7 (diff) | |
download | protobuf-2d514ce2d8b1f5fb00c6031a1a8e4dab968e4927.tar.gz protobuf-2d514ce2d8b1f5fb00c6031a1a8e4dab968e4927.tar.bz2 protobuf-2d514ce2d8b1f5fb00c6031a1a8e4dab968e4927.zip |
Fixed oneof behavior for enums and fixed JRuby.
Diffstat (limited to 'ruby/src/main/java')
-rw-r--r-- | ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java index 39213c4d..12893f73 100644 --- a/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java +++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java @@ -592,13 +592,17 @@ public class RubyMessage extends RubyObject { protected IRubyObject getField(ThreadContext context, Descriptors.FieldDescriptor fieldDescriptor) { Descriptors.OneofDescriptor oneofDescriptor = fieldDescriptor.getContainingOneof(); if (oneofDescriptor != null) { - if (oneofCases.containsKey(oneofDescriptor)) { - if (oneofCases.get(oneofDescriptor) != fieldDescriptor) - return context.runtime.getNil(); + if (oneofCases.get(oneofDescriptor) == fieldDescriptor) { return fields.get(fieldDescriptor); } else { Descriptors.FieldDescriptor oneofCase = builder.getOneofFieldDescriptor(oneofDescriptor); - if (oneofCase != fieldDescriptor) return context.runtime.getNil(); + if (oneofCase != fieldDescriptor) { + if (fieldDescriptor.getType() == Descriptors.FieldDescriptor.Type.MESSAGE) { + return context.runtime.getNil(); + } else { + return wrapField(context, fieldDescriptor, fieldDescriptor.getDefaultValue()); + } + } IRubyObject value = wrapField(context, oneofCase, builder.getField(oneofCase)); fields.put(fieldDescriptor, value); return value; |