Java Code Examples for com.google.protobuf.DescriptorProtos#FileDescriptorProto

The following examples show how to use com.google.protobuf.DescriptorProtos#FileDescriptorProto . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ProtobufTypeUtil.java    From datacollector with Apache License 2.0 6 votes vote down vote up
private static DescriptorProtos.FileDescriptorProto getFileDescProtoForMsgType(
    String packageName,
    String messageType,
    DescriptorProtos.FileDescriptorSet set
) {
  DescriptorProtos.FileDescriptorProto file = null;
  for (DescriptorProtos.FileDescriptorProto fileDescriptorProto : set.getFileList()) {
    if (!packageMatch(fileDescriptorProto, packageName)) {
      continue;
    }
    file = containsMessageType(fileDescriptorProto, messageType);
    if (file != null) {
      break;
    }
  }
  return file;
}
 
Example 2
Source File: RecordMetaDataBuilder.java    From fdb-record-layer with Apache License 2.0 6 votes vote down vote up
/**
 * Deserializes the meta-data proto into the builder.
 * @param metaDataProto the proto of the {@link RecordMetaData}
 * @param processExtensionOptions whether to add primary keys and indexes based on extensions in the protobuf
 * @return this builder
 */
@Nonnull
public RecordMetaDataBuilder setRecords(@Nonnull RecordMetaDataProto.MetaData metaDataProto,
                                        boolean processExtensionOptions) {
    if (recordsDescriptor != null) {
        throw new MetaDataException("Records already set.");
    }
    // Build the recordDescriptor by de-serializing the metaData proto
    Map<String, DescriptorProtos.FileDescriptorProto> protoDependencies = new TreeMap<>();
    for (DescriptorProtos.FileDescriptorProto dependency : metaDataProto.getDependenciesList()) {
        protoDependencies.put(dependency.getName(), dependency);
    }
    Map<String, Descriptors.FileDescriptor> generatedDependencies = initGeneratedDependencies(protoDependencies);
    Descriptors.FileDescriptor[] dependencies = getDependencies(metaDataProto.getRecords(), generatedDependencies, protoDependencies);
    loadFromProto(metaDataProto, dependencies, processExtensionOptions);
    return this;
}
 
Example 3
Source File: MutinyGrpcGenerator.java    From quarkus with Apache License 2.0 6 votes vote down vote up
private List<ServiceContext> findServices(List<DescriptorProtos.FileDescriptorProto> protos, ProtoTypeMap typeMap) {
    List<ServiceContext> contexts = new ArrayList<>();

    protos.forEach(fileProto -> {
        for (int serviceNumber = 0; serviceNumber < fileProto.getServiceCount(); serviceNumber++) {
            ServiceContext serviceContext = buildServiceContext(
                    fileProto.getService(serviceNumber),
                    typeMap,
                    fileProto.getSourceCodeInfo().getLocationList(),
                    serviceNumber);
            serviceContext.protoName = fileProto.getName();
            serviceContext.packageName = extractPackageName(fileProto);
            contexts.add(serviceContext);
        }
    });

    return contexts;
}
 
Example 4
Source File: MetaDataProtoEditor.java    From fdb-record-layer with Apache License 2.0 6 votes vote down vote up
/**
 * Creates a default union descriptor for the given file descriptor if missing.
 *
 * <p>
 * If the given file descriptor is missing a union message, this method will add one before updating the meta-data.
 * The generated union descriptor is constructed by adding any non-{@code NESTED} types in the file descriptor to the
 * union descriptor from the currently stored meta-data. A new field is not added if a field of the given type already
 * exists, and the order of any existing fields is preserved. Note that types are identified by name, so renaming
 * top-level message types may result in validation errors when trying to update the record descriptor.
 * </p>
 *
 * @param fileDescriptor the file descriptor to create a union for
 * @param baseUnionDescriptor the base union descriptor
 * @return the builder for the union
 */
@Nonnull
public static Descriptors.FileDescriptor addDefaultUnionIfMissing(@Nonnull Descriptors.FileDescriptor fileDescriptor, @Nonnull Descriptors.Descriptor baseUnionDescriptor) {
    if (MetaDataProtoEditor.hasUnion(fileDescriptor)) {
        return fileDescriptor;
    }
    DescriptorProtos.FileDescriptorProto fileDescriptorProto = fileDescriptor.toProto();
    DescriptorProtos.FileDescriptorProto.Builder fileBuilder = fileDescriptorProto.toBuilder();
    DescriptorProtos.DescriptorProto.Builder unionDescriptorBuilder = createSyntheticUnion(fileDescriptor, baseUnionDescriptor);
    for (DescriptorProtos.DescriptorProto.Builder messageType : fileBuilder.getMessageTypeBuilderList()) {
        RecordMetaDataOptionsProto.RecordTypeOptions.Usage messageTypeUsage = getMessageTypeUsage(messageType);
        if (messageTypeUsage != RecordMetaDataOptionsProto.RecordTypeOptions.Usage.NESTED
                && !hasField(fileBuilder, unionDescriptorBuilder, messageType)) {
            addFieldToUnion(unionDescriptorBuilder, fileBuilder, messageType);
        }
    }
    fileBuilder.addMessageType(unionDescriptorBuilder);
    try {
        return Descriptors.FileDescriptor.buildFrom(fileBuilder.build(), fileDescriptor.getDependencies().toArray(new Descriptors.FileDescriptor[0]));
    } catch (Descriptors.DescriptorValidationException e) {
        throw new MetaDataException("Failed to add a default union", e);
    }
}
 
Example 5
Source File: RecordMetaDataBuilder.java    From fdb-record-layer with Apache License 2.0 5 votes vote down vote up
@Nonnull
private static Map<String, Descriptors.FileDescriptor> initGeneratedDependencies(@Nonnull Map<String, DescriptorProtos.FileDescriptorProto> protoDependencies) {
    Map<String, Descriptors.FileDescriptor> generatedDependencies = new TreeMap<>();
    if (!protoDependencies.containsKey(TupleFieldsProto.getDescriptor().getName())) {
        generatedDependencies.put(TupleFieldsProto.getDescriptor().getName(), TupleFieldsProto.getDescriptor());
    }
    if (!protoDependencies.containsKey(RecordMetaDataOptionsProto.getDescriptor().getName())) {
        generatedDependencies.put(RecordMetaDataOptionsProto.getDescriptor().getName(), RecordMetaDataOptionsProto.getDescriptor());
    }
    if (!protoDependencies.containsKey(RecordMetaDataProto.getDescriptor().getName())) {
        generatedDependencies.put(RecordMetaDataProto.getDescriptor().getName(), RecordMetaDataProto.getDescriptor());
    }
    return generatedDependencies;
}
 
Example 6
Source File: ProtoToAvroSchemaTest.java    From metastore with Apache License 2.0 5 votes vote down vote up
@Test
public void testSingleLong() throws IOException, StatusRuntimeException {
  String node = getJsonNode("testSingleLong");

  final DescriptorProtos.FileDescriptorProto fileDescriptorProto =
      TestSingleLong.getDescriptor().getFile().toProto();
  ProtoDomain protoDomain = ProtoDomain.builder().add(fileDescriptorProto).build();

  String avroSchema =
      ProtoToAvroSchema.convert(
          protoDomain, String.format("%s.TestSingleLong", fileDescriptorProto.getPackage()));

  Assert.assertEquals(node, avroSchema);
}
 
Example 7
Source File: MutinyGrpcGenerator.java    From quarkus with Apache License 2.0 5 votes vote down vote up
private String extractPackageName(DescriptorProtos.FileDescriptorProto proto) {
    DescriptorProtos.FileOptions options = proto.getOptions();
    if (options != null) {
        String javaPackage = options.getJavaPackage();
        if (!Strings.isNullOrEmpty(javaPackage)) {
            return javaPackage;
        }
    }

    return Strings.nullToEmpty(proto.getPackage());
}
 
Example 8
Source File: ProtoTypeMapTest.java    From grpc-java-contrib with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
@BeforeClass
public static void buildProtoTypeMap() throws IOException {
    // Dump file generated during the maven generate-test-sources phase
    final String dumpPath = "target/generated-test-sources/protobuf/dump/descriptor_dump";

    byte[] generatorRequestBytes = ByteStreams.toByteArray(new FileInputStream(new File(dumpPath)));
    PluginProtos.CodeGeneratorRequest request = PluginProtos.CodeGeneratorRequest.parseFrom(
            generatorRequestBytes, ExtensionRegistry.newInstance());
    List<DescriptorProtos.FileDescriptorProto> fileProtos = request.getProtoFileList();
    protoTypeMap =  ProtoTypeMap.of(fileProtos);
}
 
Example 9
Source File: ProtobufTypeUtil.java    From datacollector with Apache License 2.0 5 votes vote down vote up
private static List<DescriptorProtos.DescriptorProto> getAllMessageTypesInDescriptorProto(
    DescriptorProtos.FileDescriptorProto fileDescriptorProto
) {
  Queue<DescriptorProtos.DescriptorProto> queue = new LinkedList<>();
  queue.addAll(fileDescriptorProto.getMessageTypeList());
  List<DescriptorProtos.DescriptorProto> result = new ArrayList<>();
  while (!queue.isEmpty()) {
    DescriptorProtos.DescriptorProto descriptorProto = queue.poll();
    queue.addAll(descriptorProto.getNestedTypeList());
    result.add(descriptorProto);
  }
  return result;
}
 
Example 10
Source File: ProtoDiffTest.java    From metastore with Apache License 2.0 5 votes vote down vote up
@Test
public void renameMethod() throws Exception {
  ProtoDomain dRef = ProtoDomain.builder().add(FILE_V1).build();
  DescriptorProtos.FileDescriptorProto fd =
      FILE_V1
          .toBuilder()
          .setService(
              0,
              FILE_V1
                  .getService(0)
                  .toBuilder()
                  .setMethod(
                      0, FILE_V1.getService(0).getMethod(0).toBuilder().setName("MethodX")))
          .build();

  ProtoDomain dNew = ProtoDomain.builder().add(fd).build();
  Report report = diff(dRef, dNew);
  ServiceResult result = report.getServiceResultsMap().get("package.v1.Service1");
  Assert.assertEquals(ChangeType.UNCHANGED, result.getChange().getChangeType());

  Assert.assertEquals(
      ChangeType.ADDITION, result.getMethodResults(0).getChange().getChangeType());
  Assert.assertEquals("MethodX", result.getMethodResults(0).getName());
  Assert.assertEquals("", result.getMethodResults(0).getChange().getFromName());
  Assert.assertEquals("MethodX", result.getMethodResults(0).getChange().getToName());

  Assert.assertEquals(ChangeType.REMOVAL, result.getMethodResults(1).getChange().getChangeType());
  Assert.assertEquals("Method1", result.getMethodResults(1).getName());
  Assert.assertEquals("Method1", result.getMethodResults(1).getChange().getFromName());
  Assert.assertEquals("", result.getMethodResults(1).getChange().getToName());
}
 
Example 11
Source File: Jdk8Generator.java    From grpc-java-contrib with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
@Override
public List<PluginProtos.CodeGeneratorResponse.File> generateFiles(PluginProtos.CodeGeneratorRequest request) throws GeneratorException {
    final ProtoTypeMap protoTypeMap = ProtoTypeMap.of(request.getProtoFileList());
    List<PluginProtos.CodeGeneratorResponse.File> files = new ArrayList<>();

    for (DescriptorProtos.FileDescriptorProto protoFile : request.getProtoFileList()) {
        if (request.getFileToGenerateList().contains(protoFile.getName())) {
            for (ServiceContext ctx : extractContext(protoTypeMap, protoFile)) {
                files.add(buildFile(ctx));
            }
        }
    }

    return files;
}
 
Example 12
Source File: ProtoDiffTest.java    From metastore with Apache License 2.0 5 votes vote down vote up
@Test
public void changeFieldType() throws Exception {
  ProtoDomain dRef = ProtoDomain.builder().add(FILE_V1).build();
  DescriptorProtos.FileDescriptorProto fd =
      FILE_V1
          .toBuilder()
          .setMessageType(
              0,
              FILE_V1
                  .getMessageType(0)
                  .toBuilder()
                  .setField(
                      1,
                      DescriptorProtos.FieldDescriptorProto.newBuilder()
                          .setNumber(2)
                          .setName("seconde_nullable_field")
                          .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE)
                          .setTypeName("google.protobuf.Int64Value")
                          .build())
                  .build())
          .build();

  ProtoDomain dNew = ProtoDomain.builder().add(fd).build();
  Report report = diff(dRef, dNew);
  MessageResult result = report.getMessageResultsMap().get("package.v1.Message1");
  Assert.assertEquals(ChangeType.UNCHANGED, result.getChange().getChangeType());
  Assert.assertEquals(ChangeType.CHANGED, result.getFieldResults(0).getChange().getChangeType());
  Assert.assertEquals(
      "google.protobuf.StringValue", result.getFieldResults(0).getChange().getFromTypeName());
  Assert.assertEquals(
      "google.protobuf.Int64Value", result.getFieldResults(0).getChange().getToTypeName());
}
 
Example 13
Source File: ProtoDiffTest.java    From metastore with Apache License 2.0 5 votes vote down vote up
@Test
public void addField() throws Exception {
  ProtoDomain dRef = ProtoDomain.builder().add(FILE_V1).build();
  DescriptorProtos.FileDescriptorProto fd =
      FILE_V1
          .toBuilder()
          .setMessageType(
              0,
              FILE_V1
                  .getMessageType(0)
                  .toBuilder()
                  .addField(
                      DescriptorProtos.FieldDescriptorProto.newBuilder()
                          .setName("fourth_field")
                          .setNumber(4)
                          .setType(DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING)))
          .build();

  ProtoDomain dNew = ProtoDomain.builder().add(fd).build();
  Report report = diff(dRef, dNew);
  MessageResult result = report.getMessageResultsMap().get("package.v1.Message1");
  Assert.assertEquals(ChangeType.UNCHANGED, result.getChange().getChangeType());
  Assert.assertEquals(ChangeType.ADDITION, result.getFieldResults(0).getChange().getChangeType());
  Assert.assertEquals(4, result.getFieldResults(0).getNumber());
  Assert.assertEquals("fourth_field", result.getFieldResults(0).getName());
  Assert.assertEquals("", result.getFieldResults(0).getChange().getFromName());
  Assert.assertEquals("fourth_field", result.getFieldResults(0).getChange().getToName());
}
 
Example 14
Source File: ProtoDomain.java    From beam with Apache License 2.0 5 votes vote down vote up
private void crosswire() {
  HashMap<String, DescriptorProtos.FileDescriptorProto> map = new HashMap<>();
  fileDescriptorSet.getFileList().stream()
      .filter(fdp -> !fdp.getName().startsWith("google/protobuf"))
      .forEach(fdp -> map.put(fdp.getName(), fdp));

  ExtensionRegistry extensionRegistry = ExtensionRegistry.newInstance();
  Map<String, Descriptors.FileDescriptor> outMap = new HashMap<>();
  map.forEach(
      (fileName, proto) -> convertToFileDescriptorMap(fileName, map, outMap, extensionRegistry));
  fileDescriptorMap = outMap;

  indexOptionsByNumber(fileDescriptorMap.values());
  indexDescriptorByName();
}
 
Example 15
Source File: ProtoDomain.java    From metastore with Apache License 2.0 5 votes vote down vote up
public Builder mergeBinary(Collection<ByteString> updateBytes)
    throws InvalidProtocolBufferException {
  Collection<DescriptorProtos.FileDescriptorProto> updateProtos = new ArrayList<>();
  for (ByteString bs : updateBytes) {
    updateProtos.add(DescriptorProtos.FileDescriptorProto.parseFrom(bs));
  }
  return merge(updateProtos);
}
 
Example 16
Source File: ProtobufTypeUtil.java    From datacollector with Apache License 2.0 5 votes vote down vote up
/**
 * Loads a Protobuf file descriptor set into an ubermap of file descriptors.
 *
 * @param set               FileDescriptorSet
 * @param dependenciesMap   FileDescriptor dependency map
 * @param fileDescriptorMap The populated map of FileDescriptors
 * @throws StageException
 */
public static void getAllFileDescriptors(
    DescriptorProtos.FileDescriptorSet set,
    Map<String, Set<Descriptors.FileDescriptor>> dependenciesMap,
    Map<String, Descriptors.FileDescriptor> fileDescriptorMap
) throws StageException {
  List<DescriptorProtos.FileDescriptorProto> fileList = set.getFileList();
  try {
    for (DescriptorProtos.FileDescriptorProto fdp : fileList) {
      if (!fileDescriptorMap.containsKey(fdp.getName())) {
        Set<Descriptors.FileDescriptor> dependencies = dependenciesMap.get(fdp.getName());
        if (dependencies == null) {
          dependencies = new LinkedHashSet<>();
          dependenciesMap.put(fdp.getName(), dependencies);
          dependencies.addAll(getDependencies(dependenciesMap, fileDescriptorMap, fdp, set));
        }
        Descriptors.FileDescriptor fileDescriptor = Descriptors.FileDescriptor.buildFrom(
            fdp,
            dependencies.toArray(new Descriptors.FileDescriptor[dependencies.size()])
        );
        fileDescriptorMap.put(fdp.getName(), fileDescriptor);
      }
    }
  } catch (Descriptors.DescriptorValidationException e) {
    throw new StageException(Errors.PROTOBUF_07, e.getDescription(), e);
  }
}
 
Example 17
Source File: ProtoLanguageFileWriterTest.java    From metastore with Apache License 2.0 4 votes vote down vote up
private void assertEnum(DescriptorProtos.FileDescriptorProto proto, ProtoDomain domain)
    throws Descriptors.DescriptorValidationException {
  testOutput(
      proto,
      domain,
      "syntax = \"proto3\";\n"
          + "\n"
          + "import \"test/v1/option.proto\";\n"
          + "\n"
          + "\n"
          + "\n"
          + "enum WriteEnum {\n"
          + "\toption deprecated = true;\n"
          + "\toption (test.v1.enum_option) = {\n"
          + "\t\tsingle_string: \"testString\"\n"
          + "\t\trepeated_string: [\"test1\",\"test2\"]\n"
          + "\t\tsingle_int32: 2\n"
          + "\t\trepeated_int32: [3,4]\n"
          + "\t\tsingle_int64: 10\n"
          + "\t\tsingle_enum: ENUM2\n"
          + "\t\tsingle_message: {\n"
          + "\t\t\tsingle_string: \"minimal\"\n"
          + "\t\t\trepeated_string: [\"test1\",\"test2\"]\n"
          + "\t\t\tsingle_int32: 2\n"
          + "\t\t\trepeated_int32: [3]\n"
          + "\t\t\tsingle_enum: ENUM2\n"
          + "\t\t}\n"
          + "\t};\n"
          + "\toption (test.v1.enum_option_1) = 12;\n"
          + "\toption (test.v1.enum_option_2) = \"String\";\n"
          + "\toption (test.v1.enum_option_n) = \"Value I\";\n"
          + "\toption (test.v1.enum_option_n) = \"Value II\";\n"
          + "\toption (test.v1.enum_option_n) = \"Value III\";\n"
          + "\n"
          + "\tWRITE_ENUM_UNSET = 0 [\n"
          + "\t\tdeprecated = true,\n"
          + "\t\t(test.v1.enum_value_option) = {\n"
          + "\t\t\tsingle_string: \"testString\"\n"
          + "\t\t\trepeated_string: [\"test1\",\"test2\"]\n"
          + "\t\t\tsingle_int32: 2\n"
          + "\t\t\trepeated_int32: [3,4]\n"
          + "\t\t\tsingle_int64: 10\n"
          + "\t\t\tsingle_enum: ENUM2\n"
          + "\t\t\tsingle_message: {\n"
          + "\t\t\t\tsingle_string: \"minimal\"\n"
          + "\t\t\t\trepeated_string: [\"test1\",\"test2\"]\n"
          + "\t\t\t\tsingle_int32: 2\n"
          + "\t\t\t\trepeated_int32: [3]\n"
          + "\t\t\t\tsingle_enum: ENUM2\n"
          + "\t\t\t}\n"
          + "\t\t},\n"
          + "\t\t(test.v1.enum_value_option_1) = 12,\n"
          + "\t\t(test.v1.enum_value_option_2) = \"String\",\n"
          + "\t\t(test.v1.enum_value_option_n) = \"Value I\",\n"
          + "\t\t(test.v1.enum_value_option_n) = \"Value II\",\n"
          + "\t\t(test.v1.enum_value_option_n) = \"Value III\"\n"
          + "\t];\n"
          + "}\n");
}
 
Example 18
Source File: Convert.java    From metastore with Apache License 2.0 4 votes vote down vote up
static Map<String, Descriptors.FileDescriptor> convertFileDescriptorSet(
    DescriptorProtos.FileDescriptorSet fileDescriptorSet) {
  Map<String, DescriptorProtos.FileDescriptorProto> inMap = extractProtoMap(fileDescriptorSet);
  return convertToFileDescriptorMap(inMap);
}
 
Example 19
Source File: Convert.java    From metastore with Apache License 2.0 4 votes vote down vote up
private static Map<String, DescriptorProtos.FileDescriptorProto> extractProtoMap(
    DescriptorProtos.FileDescriptorSet fileDescriptorSet) {
  HashMap<String, DescriptorProtos.FileDescriptorProto> map = new HashMap<>();
  fileDescriptorSet.getFileList().forEach(fdp -> map.put(fdp.getName(), fdp));
  return map;
}
 
Example 20
Source File: ProtobufParser.java    From product-microgateway with Apache License 2.0 2 votes vote down vote up
/**
 * Generate OpenAPI from protobuf.
 *
 * @param protoPath      protobuf file path
 * @param descriptorPath descriptor file path
 * @return {@link OpenAPI} list of OpenAPIs
 */
public ArrayList<OpenAPI> generateOpenAPI(String protoPath, String descriptorPath) {
    DescriptorProtos.FileDescriptorProto descriptor =
            generateRootFileDescriptor(protoPath, descriptorPath);
    return generateOpenAPIFromProto(descriptor, protoPath);
}