field->options().DebugString()
returns
"51234: \"uuid\"\n"
So he even got the ID right that is defined here:
syntax = "proto3";
import "google/protobuf/descriptor.proto";
package javaleo.proto;
extend google.protobuf.FieldOptions {
string javatype = 51234;
}
Am Dienstag, 26. November 2019 18:18:04 UTC+1 schrieb Adam Cozzette:
>
> I wonder if the parser put it in the uninterpreted_option field within
> FieldOptions. Could you try also printing out
> field->options().DebugString()?
>
> On Tue, Nov 26, 2019 at 1:58 AM Leo Hilbert <[email protected]
> <javascript:>> wrote:
>
>> Hi, sure!
>> It returns:
>> "string id = 1[json_name = \"id\", (.javaleo.proto.javatype) =
>> \"uuid\"];\n"
>>
>> I also attached a screenshot of the field where you can see that
>> options->_extensions_ is empty.
>>
>> [image: Bildschirmfoto 2019-11-26 um 10.54.35.png]
>>
>> The line in the proto-file looks like this:
>>
>> string id = 1 [(javaleo.proto.javatype) = "uuid"];
>>
>>
>>
>>
>>
>> Am Montag, 25. November 2019 22:40:41 UTC+1 schrieb Adam Cozzette:
>>>
>>> Your code looks right as far as I can tell. In C++ there's no need to
>>> manually register extensions because they register themselves before main()
>>> begins. Could you try calling DebugString() on the FieldDescriptor that you
>>> expect to have the extension? Seeing a human-readable summary of that
>>> descriptor might offer some insight.
>>>
>>> On Mon, Nov 25, 2019 at 12:28 PM Leo Hilbert <[email protected]> wrote:
>>>
>>>> Hi guys,
>>>>
>>>> *Background:*
>>>> I'm currently building/prototyping a modified version of the protoc
>>>> java-compiler. I need to change some things from the
>>>> standard-implementation for my usecase, but want to keep most of it.
>>>> To avoid starting from scratch I copied the java-generation-code to my
>>>> own project and started to modify it. I'm a java-dev, so C++ proves to be
>>>> quite the challenge, but I'm learning a lot and am nearly finished with
>>>> what I wanted to do. However now I'm stuck and need your help.
>>>>
>>>> Here is a quick overview of the relevant folders in my project (
>>>> https://github.com/leohilbert/protoc-gen-java-leo ):
>>>>
>>>> - *include-folder*: "h-files" that I copied over (otherwise no
>>>> classes from the protoc-libraries were found)
>>>> - *java-folder*: for my java-library. Also contains my
>>>> test-proto-files for now (java/src/test/proto).
>>>> - *src/google/protobuf/compiler/java_leo*: copied and modifed
>>>> java-generation code from the official repo
>>>> - *src/javaleo/proto*: the generated c++ code for my custom
>>>> FieldOption (java/src/test/proto/options.proto)
>>>>
>>>> btw: if you have any feedback on my setup, it's greatly appreciated!
>>>> I'm a C++ noob and trying to understand everything as I go. :)
>>>>
>>>> *Now to my actual problem:*
>>>> If you navigate to src/google/protobuf/compiler/java_leo/java_field.cc
>>>> <https://github.com/leohilbert/protoc-gen-java-leo/blob/master/src/google/protobuf/compiler/java_leo/java_field.cc>
>>>> in
>>>> line 64 you can see that I'm trying to read the value from my custom-field
>>>> option by calling
>>>> string test = field->options().GetExtension(javaleo::proto::javatype);
>>>>
>>>> This is *always *empty. Although I imported and used this exact custom
>>>> FieldOption
>>>> <https://github.com/leohilbert/protoc-gen-java-leo/blob/master/java/src/test/proto/options.proto>
>>>>
>>>> in my addressbook.proto
>>>> <https://github.com/leohilbert/protoc-gen-java-leo/blob/master/java/src/test/proto/addressbook.proto>
>>>> .
>>>> The C++-Class for the option.proto is also generated and add in the
>>>> CMakeList (src/javaleo/proto).
>>>> "javaleo::proto::javatype" *does* compile, so at least it seems to be
>>>> in the executable somewhere.
>>>>
>>>> What makes me suspicious is that I did not register this
>>>> custom-extension anywhere in my code. I'm thinking of something like
>>>> "ExtensionRegistry.registerExtension(javaleo::proto::javatype);" to add to
>>>> the beginning of my plugin (main.cpp). Otherwise how should protoc know
>>>> how
>>>> this field should be interpreted. Am I on the right track here, or did I
>>>> understand this whole system wrong.
>>>>
>>>> I debugged this a lot already and am running out of ideas. Searching
>>>> for a solution online is also really tricky, because not a lot of people
>>>> have compiled there own protoc-compiler.. But maybe I'm looking in the
>>>> wrong direction.
>>>>
>>>> I hope my issue is somewhat clear, it's hard describing it when knowing
>>>> so little about c++ and how protoc works internally.. ^^
>>>>
>>>> TLDR: I need to get the value of my custom-option during
>>>> code-generation, but my field-option is always ignored. Help :c
>>>>
>>>> --
>>>> 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 [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/protobuf/8135f496-9ec3-4e0d-bff2-dd37d85792bc%40googlegroups.com
>>>>
>>>> <https://groups.google.com/d/msgid/protobuf/8135f496-9ec3-4e0d-bff2-dd37d85792bc%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>> 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 [email protected] <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/protobuf/0fe72ed2-c773-4233-9572-0ba2c1ccc657%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/protobuf/0fe72ed2-c773-4233-9572-0ba2c1ccc657%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/protobuf/c74eacbb-4b35-4ff1-a78c-88990ff2e9b8%40googlegroups.com.