DescriptorPool: call to FindFileByName() required before call to FindMessageTypeByName()?

508 views
Skip to first unread message

Dan

unread,
May 30, 2012, 4:16:27 PM5/30/12
to prot...@googlegroups.com
Hi,
In the code below, I've found that the returned Descriptor* is NULL after I call FindMessageTypeByName(), unless I first call FindFileByName() on the .proto which contains the Message I am looking for.

Is this a bug? Is there another way to do this? I would really like to be able to setup a SourceTreeDescriptorDatabase to a directory that contains all of the .proto files I plan to use and not have to search for each file individually.

Any advice is much appreciated.

thanks,
Dan


string sProtoRoot("/home/dan/tests/new-protobuf/protos");

DiskSourceTree dst;
dst.MapPath("", sProtoRoot);

SourceTreeDescriptorDatabase stdb(&dst);

DescriptorPool dp(&stdb);
const FileDescriptor* pfd = dp.FindFileByName("TestMessage.proto");
const Descriptor* pd = dp.FindMessageTypeByName("Test.TestMessage");

Jason Hsueh

unread,
Jun 4, 2012, 7:06:39 PM6/4/12
to Dan, prot...@googlegroups.com
This is a result of SourceTreeDescirptorDatabase not implementing FindFileContainingSymbol() - it doesn't maintain an index of the types available in the database within the database, just the list of files that are available. This is a sufficient implementation for the proto compiler, where one specifies the files to build and thus FindFileByName() is always called.

I'm not aware of any DescriptorDatabase implementations that have all the types within a source tree indexed - various Google-internal implementations don't support this either, as there are so many .proto files that it's typically not useful to load all of them, and we have clients specify the leaf file explicitly.



--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To view this discussion on the web visit https://groups.google.com/d/msg/protobuf/-/V3u8UREKOEAJ.
To post to this group, send email to prot...@googlegroups.com.
To unsubscribe from this group, send email to protobuf+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.

Dan

unread,
Jun 5, 2012, 1:26:07 PM6/5/12
to prot...@googlegroups.com, Dan
Thanks for the update Jason. I'll make sure to iterate over the directory and call FindFileByName() on each .proto I plan to use
To unsubscribe from this group, send email to protobuf+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages