Example #1
0
        private FileDescriptor(FileDescriptorProto proto, FileDescriptor[] dependencies, DescriptorPool pool, bool allowUnknownDependencies)
        {
            this.pool         = pool;
            this.proto        = proto;
            this.dependencies = new ReadOnlyCollection <FileDescriptor>((FileDescriptor[])dependencies.Clone());

            publicDependencies = DeterminePublicDependencies(this, proto, dependencies, allowUnknownDependencies);

            pool.AddPackage(Package, this);

            messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageTypeList,
                                                                 (message, index) =>
                                                                 new MessageDescriptor(message, this, null, index));

            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
                                                              (enumType, index) =>
                                                              new EnumDescriptor(enumType, this, null, index));

            services = DescriptorUtil.ConvertAndMakeReadOnly(proto.ServiceList,
                                                             (service, index) =>
                                                             new ServiceDescriptor(service, this, index));

            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,
                                                               (field, index) =>
                                                               new FieldDescriptor(field, this, null, index, true));
        }
        public ServiceDescriptor(ServiceDescriptorProto proto, FileDescriptor file, int index)
            : base(proto, file, ComputeFullName(file, null, proto.Name), index)
        {
            methods = DescriptorUtil.ConvertAndMakeReadOnly(proto.MethodList,
                                                            (method, i) => new MethodDescriptor(method, file, this, i));

            file.DescriptorPool.AddSymbol(this);
        }
Example #3
0
        internal EnumDescriptor(EnumDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index)
            : base(proto, file, ComputeFullName(file, parent, proto.Name), index)
        {
            containingType = parent;

            if (proto.ValueCount == 0)
            {
                // We cannot allow enums with no values because this would mean there
                // would be no valid default value for fields of this type.
                throw new DescriptorValidationException(this, "Enums must contain at least one value.");
            }

            values = DescriptorUtil.ConvertAndMakeReadOnly(proto.ValueList,
                                                           (value, i) => new EnumValueDescriptor(value, file, this, i));

            File.DescriptorPool.AddSymbol(this);
        }
        internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex)
            : base(proto, file, ComputeFullName(file, parent, proto.Name), typeIndex)
        {
            containingType = parent;

            nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedTypeList,
                                                                (type, index) => new MessageDescriptor(type, file, this, index));

            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
                                                              (type, index) => new EnumDescriptor(type, file, this, index));

            fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList,
                                                           (field, index) => new FieldDescriptor(field, file, this, index, false));

            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,
                                                               (field, index) => new FieldDescriptor(field, file, this, index, true));

            file.DescriptorPool.AddSymbol(this);
        }
        internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex)
            : base(proto, file, ComputeFullName(file, parent, proto.Name), typeIndex)
        {
            containingType = parent;

            oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDeclList,
                                                           (oneof, index) =>
                                                           new OneofDescriptor(oneof, file, this, index));

            nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedTypeList,
                                                                (type, index) =>
                                                                new MessageDescriptor(type, file, this, index));

            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
                                                              (type, index) =>
                                                              new EnumDescriptor(type, file, this, index));

            // TODO(jonskeet): Sort fields first?
            fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList,
                                                           (field, index) =>
                                                           new FieldDescriptor(field, file, this, index, false));

            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,
                                                               (field, index) =>
                                                               new FieldDescriptor(field, file, this, index, true));

            for (int i = 0; i < proto.OneofDeclCount; i++)
            {
                oneofs[i].fields     = new FieldDescriptor[oneofs[i].FieldCount];
                oneofs[i].fieldCount = 0;
            }
            for (int i = 0; i < proto.FieldCount; i++)
            {
                OneofDescriptor oneofDescriptor = fields[i].ContainingOneof;
                if (oneofDescriptor != null)
                {
                    oneofDescriptor.fields[oneofDescriptor.fieldCount++] = fields[i];
                }
            }
            file.DescriptorPool.AddSymbol(this);
        }