From 3beac3d7c9ebfc85991c39d979e763e770a2caf0 Mon Sep 17 00:00:00 2001 From: Jason Lunn Date: Wed, 8 Nov 2023 14:25:35 -0500 Subject: [PATCH] Add `options` to `FieldDescriptors` under JRuby. --- .../com/google/protobuf/jruby/RubyFieldDescriptor.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java index 50f42cfa70560..6987a587eddb1 100644 --- a/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java +++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java @@ -32,6 +32,7 @@ package com.google.protobuf.jruby; +import com.google.protobuf.CodedInputStream; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.LegacyDescriptorsUtil.LegacyFileDescriptor; import org.jruby.*; @@ -231,6 +232,14 @@ public IRubyObject setValue(ThreadContext context, IRubyObject message, IRubyObj return context.nil; } + @JRubyMethod + public IRubyObject options(ThreadContext context) { + RubyDescriptor fieldOptionsDescriptor = (RubyDescriptor) pool.lookup(context, context.runtime.newString("google.protobuf.FieldOptions")); + RubyClass fieldOptionsClass = (RubyClass) fieldOptionsDescriptor.msgclass(context); + RubyMessage msg = (RubyMessage) fieldOptionsClass.newInstance(context, Block.NULL_BLOCK); + return msg.decodeBytes(context, msg, CodedInputStream.newInstance(descriptor.getOptions().toByteString().toByteArray()), /*freeze*/ true); + } + protected void setDescriptor( ThreadContext context, FieldDescriptor descriptor, RubyDescriptorPool pool) { if (descriptor.isRequired()