Given that there is no Java version of protoc, it has been tempting to see
how far one can get with just using FileDescriptorSet's and dynamic
messages. I ended up building this short function for iteratively adding all
the dependencies of a particular Message in to a FileDescriptorSet. While it
wasn't too much pain, it was a tad annoying, and I am wondering why this
kind of functionality isn't built in to the Java API. Here's what I ended up
with:

    /**
     * Get the entire descriptor set needed to describe a message in
     * dependency order.
     *
     * @param aMessage the message to inspect
     * @return a complete descriptor set containing all the elements needed
to parse this message
     */

    static FileDescriptorSet getDescriptorSetFor(final Message aMessage) {
        final FileDescriptor file =
aMessage.getDescriptorForType().getFile();
        final List<FileDescriptor> fileDescriptors = new
ArrayList<FileDescriptor>();
        fileDescriptors.add(file);

        //Don't use an iter as we intend to keep looping until the list
        //stops growing
        for (int i = 0; i < fileDescriptors.size(); ++i) {
            final FileDescriptor nextElement = fileDescriptors.get(i);
            for (FileDescriptor dependency : nextElement.getDependencies())
{
                if (!fileDescriptors.contains(dependency)) {
                    fileDescriptors.add(dependency);
                }
            }
        }

        final FileDescriptorSet.Builder builder =
FileDescriptorSet.newBuilder();
        for (FileDescriptor descriptor : fileDescriptors) {
            builder.addFile(descriptor.toProto());
        }
        return builder.build();
    }

Is this really the right way to handle this, and if so, any chance we can
get this built in to the protobuf library?

-- 
Chris

--

You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.


Reply via email to