Re: [protobuf] How to get value of protobuf custom option in Java?

2017-09-05 Thread Noel Yap
Yes, it's the latter: `options.proto` is part of the protoc plugin while
`foo.proto` is not.

Judging from what I've seen of what's generated as part of the protoc
plugin versus what's generated by what's using the protoc plugin, I had
just formulated this very same hypothesis and was about to test it out.
Thanks for concurring that this is a good line to investigate and, in fact,
what's actually happening underneath. I've been hitting my head against
this problem for a while and had started losing steam so your response
helps a lot.

Thanks, again,
Noel

On Tue, Sep 5, 2017 at 10:49 AM Feng Xiao  wrote:

> Suppose you have two .proto files, an options.proto where the extension is
> defined, and a foo.proto where the custom option is used.
>
> If both proto files are actually part of your protoc plugin (i.e., your
> plugin includes the generated Java class of both .proto files), you should
> be able to access the option values in foo.proto without problem.
>
> If options.proto is part of your protoc plugin, and foo.proto is the proto
> file that's being compiled by protoc + your plugin, you need to provide an
> ExtensionRegistry when parsing the CodeGeneratorRequest message. After that
> custom options included in the ExtensionRegistry should be accessible.
>
> On Fri, Sep 1, 2017 at 5:34 PM, Noel Yap  wrote:
>
>> Hmm, I'm wondering if that starting block never actually executes.
>>
>> On Fri, Sep 1, 2017, 17:05 Noel Yap  wrote:
>>
>>> I'm seeing the generated code having in a `static` init block:
>>> ```
>>> com.google.protobuf.Descriptors.FileDescriptor
>>>   .internalBuildGeneratedFileFrom(descriptorData,
>>> new com.google.protobuf.Descriptors.FileDescriptor[] {
>>>
>>> com.example.proto.options.api_docs.ApiDocsOptionsProto.getDescriptor(),
>>>   com.example.proto.options.ServerOptionsProto.getDescriptor(),
>>> }, assigner);
>>> com.google.protobuf.ExtensionRegistry registry =
>>> com.google.protobuf.ExtensionRegistry.newInstance();
>>> registry.add(com.example.proto.options.ServerOptionsProto.server);
>>> com.google.protobuf.Descriptors.FileDescriptor
>>> .internalUpdateFileDescriptor(descriptor, registry);
>>>
>>> com.example.proto.options.api_docs.ApiDocsOptionsProto.getDescriptor();
>>> com.example.proto.options.ServerOptionsProto.getDescriptor();
>>> ```
>>>
>>> On Fri, Sep 1, 2017 at 4:54 PM Adam Cozzette 
>>> wrote:
>>>
 You may also need to provide an ExtensionRegistry as described here
 
 when you parse the proto, in order for the extension to be visible.

 On Fri, Sep 1, 2017 at 3:55 PM, Noel Yap  wrote:

> One piece of possibly important information. The code being written is
> for a `protoc` plugin. I've updated the Stackoverflow question to state
> that.
>
> On Fri, Sep 1, 2017 at 3:42 PM Noel Yap  wrote:
>
>> proto.getDescriptor().getFile().getOptions() didn't work. If I print
>> that out, I see:
>>
>> java_package: \"com.google.protobuf\"\njava_outer_classname:
>> \"DescriptorProtos\"\noptimize_for: SPEED\ngo_package: \"
>> github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor\
>> "\nobjc_class_prefix:
>> \"GPB\"\ncsharp_namespace: \"Google.Protobuf.Reflection\"
>>
>> I've also tried `proto.getOptions()`. That shows the options like
>> `java_package` but `hasExtension` for the extension I'm setting is still
>> returning `false`.
>>
>> On Fri, Sep 1, 2017 at 2:53 PM Adam Cozzette 
>> wrote:
>>
>>> I posted an answer on your StackOverflow post but let me know if you
>>> still have any trouble with that.
>>>
>>> On Wed, Aug 30, 2017 at 4:13 PM, Noel Yap 
>>> wrote:
>>>

 https://stackoverflow.com/questions/45970986/how-to-get-value-of-protobuf-custom-option-in-java

>>> --
 You received this message because you are subscribed to the Google
 Groups "Protocol Buffers" group.
 To unsubscribe from this group and stop receiving emails from it,
 send an email to protobuf+unsubscr...@googlegroups.com.
>>>
>>>
 To post to this group, send email to protobuf@googlegroups.com.
 Visit this group at https://groups.google.com/group/protobuf.
 For more options, visit https://groups.google.com/d/optout.

>>>
 --
>> You received this message because you are subscribed to the Google Groups
>> "Protocol Buffers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to protobuf+unsubscr...@googlegroups.com.
>> To post to this group, send email to protobuf@googlegroups.com.
>> Visit this group at https://groups.google.com/group/protobuf.
>> For more options, visit https://groups.google.com/d/optout.
>>

Re: [protobuf] How to get value of protobuf custom option in Java?

2017-09-05 Thread 'Feng Xiao' via Protocol Buffers
Suppose you have two .proto files, an options.proto where the extension is
defined, and a foo.proto where the custom option is used.

If both proto files are actually part of your protoc plugin (i.e., your
plugin includes the generated Java class of both .proto files), you should
be able to access the option values in foo.proto without problem.

If options.proto is part of your protoc plugin, and foo.proto is the proto
file that's being compiled by protoc + your plugin, you need to provide an
ExtensionRegistry when parsing the CodeGeneratorRequest message. After that
custom options included in the ExtensionRegistry should be accessible.

On Fri, Sep 1, 2017 at 5:34 PM, Noel Yap  wrote:

> Hmm, I'm wondering if that starting block never actually executes.
>
> On Fri, Sep 1, 2017, 17:05 Noel Yap  wrote:
>
>> I'm seeing the generated code having in a `static` init block:
>> ```
>> com.google.protobuf.Descriptors.FileDescriptor
>>   .internalBuildGeneratedFileFrom(descriptorData,
>> new com.google.protobuf.Descriptors.FileDescriptor[] {
>>   com.example.proto.options.api_docs.ApiDocsOptionsProto.
>> getDescriptor(),
>>   com.example.proto.options.ServerOptionsProto.getDescriptor(),
>> }, assigner);
>> com.google.protobuf.ExtensionRegistry registry =
>> com.google.protobuf.ExtensionRegistry.newInstance();
>> registry.add(com.example.proto.options.ServerOptionsProto.server);
>> com.google.protobuf.Descriptors.FileDescriptor
>> .internalUpdateFileDescriptor(descriptor, registry);
>> com.example.proto.options.api_docs.ApiDocsOptionsProto.
>> getDescriptor();
>> com.example.proto.options.ServerOptionsProto.getDescriptor();
>> ```
>>
>> On Fri, Sep 1, 2017 at 4:54 PM Adam Cozzette 
>> wrote:
>>
>>> You may also need to provide an ExtensionRegistry as described here
>>> 
>>> when you parse the proto, in order for the extension to be visible.
>>>
>>> On Fri, Sep 1, 2017 at 3:55 PM, Noel Yap  wrote:
>>>
 One piece of possibly important information. The code being written is
 for a `protoc` plugin. I've updated the Stackoverflow question to state
 that.

 On Fri, Sep 1, 2017 at 3:42 PM Noel Yap  wrote:

> proto.getDescriptor().getFile().getOptions() didn't work. If I print
> that out, I see:
>
> java_package: \"com.google.protobuf\"\njava_outer_classname:
> \"DescriptorProtos\"\noptimize_for: SPEED\ngo_package: \"
> github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor\
> 
> "\nobjc_class_prefix: \"GPB\"\ncsharp_namespace:
> \"Google.Protobuf.Reflection\"
>
> I've also tried `proto.getOptions()`. That shows the options like
> `java_package` but `hasExtension` for the extension I'm setting is still
> returning `false`.
>
> On Fri, Sep 1, 2017 at 2:53 PM Adam Cozzette 
> wrote:
>
>> I posted an answer on your StackOverflow post but let me know if you
>> still have any trouble with that.
>>
>> On Wed, Aug 30, 2017 at 4:13 PM, Noel Yap  wrote:
>>
>>> https://stackoverflow.com/questions/45970986/how-to-get-
>>> value-of-protobuf-custom-option-in-java
>>>
>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Protocol Buffers" group.
>>> To unsubscribe from this group and stop receiving emails from it,
>>> send an email to protobuf+unsubscr...@googlegroups.com.
>>
>>
>>> To post to this group, send email to protobuf@googlegroups.com.
>>> Visit this group at https://groups.google.com/group/protobuf.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to protobuf+unsubscr...@googlegroups.com.
> To post to this group, send email to protobuf@googlegroups.com.
> Visit this group at https://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.