1 package com.google.protobuf.jruby;
6 import org.jruby.RubyClass;
7 import org.jruby.RubyModule;
8 import org.jruby.RubyObject;
9 import org.jruby.anno.JRubyClass;
10 import org.jruby.anno.JRubyMethod;
11 import org.jruby.runtime.Block;
12 import org.jruby.runtime.ObjectAllocator;
13 import org.jruby.runtime.ThreadContext;
14 import org.jruby.runtime.builtin.IRubyObject;
18 @JRubyClass(
name =
"OneofDescriptor", include =
"Enumerable")
22 RubyModule protobuf = runtime.getClassFromPath(
"Google::Protobuf");
23 RubyClass cRubyOneofDescriptor = protobuf.defineClassUnder(
"OneofDescriptor", runtime.getObject(),
new ObjectAllocator() {
25 public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
30 cRubyOneofDescriptor.includeModule(runtime.getEnumerable());
34 super(ruby, rubyClass);
39 builder = DescriptorProtos.OneofDescriptorProto.newBuilder();
40 fields =
new ArrayList<RubyFieldDescriptor>();
50 @JRubyMethod(
name =
"name")
51 public IRubyObject getName(ThreadContext context) {
62 @JRubyMethod(
name =
"name=")
63 public IRubyObject setName(ThreadContext context, IRubyObject
name) {
64 this.name = context.runtime.newString(
name.asJavaString());
65 this.builder.setName(
name.asJavaString());
66 return context.runtime.getNil();
83 @JRubyMethod(
name =
"add_field")
84 public IRubyObject addField(ThreadContext context, IRubyObject
obj) {
87 fields.add(fieldDescriptor);
88 return context.runtime.getNil();
98 public IRubyObject
each(ThreadContext context, Block block) {
100 block.yieldSpecific(context,
field);
102 return context.runtime.getNil();
105 public DescriptorProtos.OneofDescriptorProto
build(
int index) {
109 return this.builder.build();
118 return fieldDescriptor.
getFieldDef().getContainingOneof();
122 private DescriptorProtos.OneofDescriptorProto.Builder
builder;
123 private List<RubyFieldDescriptor>
fields;