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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/CADqAXr4GoT%3DhfU7-GkpiVyy3CNE5hnUK0Fti-1S2byCfje%3D8yA%40mail.gmail.com.

Reply via email to