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