CodeGeneratorResponse generate(CodeGeneratorRequest request) { CodeGeneratorResponse.Builder builder = CodeGeneratorResponse.newBuilder(); for (FileDescriptorProto file : request.getProtoFileList()) { String javaFilename = getJavaFilename(file.getPackage(), file.getName()); for (DescriptorProto msg : file.getMessageTypeList()) { for (EnumDescriptorProto en : msg.getEnumTypeList()) { File.Builder f = File.newBuilder(); f.setName(javaFilename); f.setInsertionPoint( format("enum_scope:%s.%s.%s", file.getPackage(), msg.getName(), en.getName())); f.setContent(getEnumVisitor(en)); builder.addFile(f); } } // insert visitors at outer_class_scope } return builder.build(); }
/** * Returns a Message {@link Descriptor} for a dynamically generated DescriptorProto. * * @param descProto * @throws DescriptorValidationException */ public static Descriptor makeMessageDescriptor(DescriptorProto descProto) throws DescriptorValidationException { DescriptorProtos.FileDescriptorProto fileDescP = DescriptorProtos.FileDescriptorProto.newBuilder().addMessageType(descProto).build(); Descriptors.FileDescriptor[] fileDescs = new Descriptors.FileDescriptor[0]; Descriptors.FileDescriptor dynamicDescriptor = Descriptors.FileDescriptor.buildFrom(fileDescP, fileDescs); return dynamicDescriptor.findMessageTypeByName(descProto.getName()); }