Search in sources :

Example 1 with FileDescriptorProto

use of com.google.protobuf.DescriptorProtos.FileDescriptorProto in project tesla by linking12.

the class ServiceResolver method fromFileDescriptorSet.

public static ServiceResolver fromFileDescriptorSet(FileDescriptorSet descriptorSet) {
    ImmutableMap<String, FileDescriptorProto> descriptorProtoIndex = computeDescriptorProtoIndex(descriptorSet);
    Map<String, FileDescriptor> descriptorCache = new HashMap<>();
    ImmutableList.Builder<FileDescriptor> result = ImmutableList.builder();
    for (FileDescriptorProto descriptorProto : descriptorSet.getFileList()) {
        try {
            result.add(descriptorFromProto(descriptorProto, descriptorProtoIndex, descriptorCache));
        } catch (DescriptorValidationException e) {
            logger.warn("Skipped descriptor " + descriptorProto.getName() + " due to error", e);
            continue;
        }
    }
    return new ServiceResolver(result.build());
}
Also used : HashMap(java.util.HashMap) ImmutableList(com.google.common.collect.ImmutableList) DescriptorValidationException(com.google.protobuf.Descriptors.DescriptorValidationException) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor)

Example 2 with FileDescriptorProto

use of com.google.protobuf.DescriptorProtos.FileDescriptorProto in project tesla by linking12.

the class ServiceResolver method descriptorFromProto.

private static FileDescriptor descriptorFromProto(FileDescriptorProto descriptorProto, ImmutableMap<String, FileDescriptorProto> descriptorProtoIndex, Map<String, FileDescriptor> descriptorCache) throws DescriptorValidationException {
    String descritorName = descriptorProto.getName();
    if (descriptorCache.containsKey(descritorName)) {
        return descriptorCache.get(descritorName);
    }
    ImmutableList.Builder<FileDescriptor> dependencies = ImmutableList.builder();
    for (String dependencyName : descriptorProto.getDependencyList()) {
        if (!descriptorProtoIndex.containsKey(dependencyName)) {
            throw new IllegalArgumentException("Could not find dependency: " + dependencyName);
        }
        FileDescriptorProto dependencyProto = descriptorProtoIndex.get(dependencyName);
        dependencies.add(descriptorFromProto(dependencyProto, descriptorProtoIndex, descriptorCache));
    }
    FileDescriptor[] empty = new FileDescriptor[0];
    return FileDescriptor.buildFrom(descriptorProto, dependencies.build().toArray(empty));
}
Also used : ImmutableList(com.google.common.collect.ImmutableList) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto)

Example 3 with FileDescriptorProto

use of com.google.protobuf.DescriptorProtos.FileDescriptorProto in project atlasdb by palantir.

the class ColumnValueDescription method hydrateFromProto.

public static ColumnValueDescription hydrateFromProto(TableMetadataPersistence.ColumnValueDescription message) {
    ValueType type = ValueType.hydrateFromProto(message.getType());
    Compression compression = Compression.hydrateFromProto(message.getCompression());
    if (!message.hasClassName()) {
        return new ColumnValueDescription(type, compression);
    }
    Validate.isTrue(type == ValueType.BLOB);
    if (message.hasFormat()) {
        try {
            Format format = Format.hydrateFromProto(message.getFormat());
            Descriptor protoDescriptor = null;
            if (message.hasProtoFileDescriptorTree()) {
                FileDescriptor fileDescriptor = hydrateFileDescriptorTree(message.getProtoFileDescriptorTree());
                protoDescriptor = fileDescriptor.findMessageTypeByName(message.getProtoMessageName());
            } else if (message.hasProtoFileDescriptor()) {
                FileDescriptorProto fileProto = FileDescriptorProto.parseFrom(message.getProtoFileDescriptor());
                FileDescriptor fileDescriptor = FileDescriptor.buildFrom(fileProto, new FileDescriptor[0]);
                protoDescriptor = fileDescriptor.findMessageTypeByName(message.getProtoMessageName());
            }
            return new ColumnValueDescription(format, message.getClassName(), message.getCanonicalClassName(), compression, protoDescriptor);
        } catch (Exception e) {
            log.error("Failed to parse FileDescriptorProto.", e);
        }
    }
    /*
         * All the code in the rest of this method is to support old protos that don't have a format field.
         * Format and canonicalClassName were added at the same time.
         *
         * Once we upgrade all the old protos (after 3.6.0), we can remove the below code.
         */
    Format format = Format.hydrateFromProto(message.getFormat());
    Descriptor protoDescriptor = null;
    if (message.hasProtoFileDescriptor()) {
        try {
            FileDescriptorProto fileProto = FileDescriptorProto.parseFrom(message.getProtoFileDescriptor());
            FileDescriptor fileDescriptor = FileDescriptor.buildFrom(fileProto, new FileDescriptor[0]);
            protoDescriptor = fileDescriptor.findMessageTypeByName(message.getProtoMessageName());
        } catch (Exception e) {
            log.warn("Failed to parse FileDescriptorProto.", e);
        }
    }
    return new ColumnValueDescription(format, message.getClassName(), message.getCanonicalClassName(), compression, protoDescriptor);
}
Also used : JsonFormat(com.googlecode.protobuf.format.JsonFormat) Descriptor(com.google.protobuf.Descriptors.Descriptor) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) ParseException(com.googlecode.protobuf.format.JsonFormat.ParseException) DescriptorValidationException(com.google.protobuf.Descriptors.DescriptorValidationException) InvalidProtocolBufferException(com.google.protobuf.InvalidProtocolBufferException) IOException(java.io.IOException) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 4 with FileDescriptorProto

use of com.google.protobuf.DescriptorProtos.FileDescriptorProto in project beam by apache.

the class BeamRowToStorageApiProto method getDescriptorFromSchema.

/**
 * Given a Beam Schema, returns a protocol-buffer Descriptor that can be used to write data using
 * the BigQuery Storage API.
 */
public static Descriptor getDescriptorFromSchema(Schema schema) throws DescriptorValidationException {
    DescriptorProto descriptorProto = descriptorSchemaFromBeamSchema(schema);
    FileDescriptorProto fileDescriptorProto = FileDescriptorProto.newBuilder().addMessageType(descriptorProto).build();
    FileDescriptor fileDescriptor = FileDescriptor.buildFrom(fileDescriptorProto, new FileDescriptor[0]);
    return Iterables.getOnlyElement(fileDescriptor.getMessageTypes());
}
Also used : FieldDescriptorProto(com.google.protobuf.DescriptorProtos.FieldDescriptorProto) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) DescriptorProto(com.google.protobuf.DescriptorProtos.DescriptorProto) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor)

Example 5 with FileDescriptorProto

use of com.google.protobuf.DescriptorProtos.FileDescriptorProto in project beam by apache.

the class TableRowToStorageApiProto method getDescriptorFromTableSchema.

/**
 * Given a BigQuery TableSchema, returns a protocol-buffer Descriptor that can be used to write
 * data using the BigQuery Storage API.
 */
public static Descriptor getDescriptorFromTableSchema(TableSchema jsonSchema) throws DescriptorValidationException {
    DescriptorProto descriptorProto = descriptorSchemaFromTableSchema(jsonSchema);
    FileDescriptorProto fileDescriptorProto = FileDescriptorProto.newBuilder().addMessageType(descriptorProto).build();
    FileDescriptor fileDescriptor = FileDescriptor.buildFrom(fileDescriptorProto, new FileDescriptor[0]);
    return Iterables.getOnlyElement(fileDescriptor.getMessageTypes());
}
Also used : FieldDescriptorProto(com.google.protobuf.DescriptorProtos.FieldDescriptorProto) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) DescriptorProto(com.google.protobuf.DescriptorProtos.DescriptorProto) FileDescriptorProto(com.google.protobuf.DescriptorProtos.FileDescriptorProto) FileDescriptor(com.google.protobuf.Descriptors.FileDescriptor)

Aggregations

FileDescriptorProto (com.google.protobuf.DescriptorProtos.FileDescriptorProto)9 FileDescriptor (com.google.protobuf.Descriptors.FileDescriptor)7 DescriptorValidationException (com.google.protobuf.Descriptors.DescriptorValidationException)3 ImmutableList (com.google.common.collect.ImmutableList)2 DescriptorProto (com.google.protobuf.DescriptorProtos.DescriptorProto)2 FieldDescriptorProto (com.google.protobuf.DescriptorProtos.FieldDescriptorProto)2 FileDescriptorSet (com.google.protobuf.DescriptorProtos.FileDescriptorSet)2 Descriptor (com.google.protobuf.Descriptors.Descriptor)2 IOException (java.io.IOException)2 Strings (com.google.common.base.Strings)1 HtmlEscapers (com.google.common.html.HtmlEscapers)1 FileOptions (com.google.protobuf.DescriptorProtos.FileOptions)1 MethodDescriptorProto (com.google.protobuf.DescriptorProtos.MethodDescriptorProto)1 ServiceDescriptorProto (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto)1 Location (com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location)1 FieldDescriptor (com.google.protobuf.Descriptors.FieldDescriptor)1 MethodDescriptor (com.google.protobuf.Descriptors.MethodDescriptor)1 ServiceDescriptor (com.google.protobuf.Descriptors.ServiceDescriptor)1 InvalidProtocolBufferException (com.google.protobuf.InvalidProtocolBufferException)1 PluginProtos (com.google.protobuf.compiler.PluginProtos)1