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.
