using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Google.Protobuf.Collections; namespace Google.Protobuf.Reflection { // Token: 0x02000063 RID: 99 public sealed class MessageDescriptor : DescriptorBase { // Token: 0x060005C3 RID: 1475 RVA: 0x00014574 File Offset: 0x00012774 internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex, GeneratedClrTypeInfo generatedCodeInfo) : base(file, file.ComputeFullName(parent, proto.Name), typeIndex) { MessageDescriptor <>4__this = this; this.Proto = proto; GeneratedClrTypeInfo generatedCodeInfo2 = generatedCodeInfo; this.Parser = ((generatedCodeInfo2 != null) ? generatedCodeInfo2.Parser : null); GeneratedClrTypeInfo generatedCodeInfo3 = generatedCodeInfo; this.ClrType = ((generatedCodeInfo3 != null) ? generatedCodeInfo3.ClrType : null); this.ContainingType = parent; this.Oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDecl, (OneofDescriptorProto oneof, int index) => new OneofDescriptor(oneof, file, <>4__this, index, generatedCodeInfo.OneofNames[index])); this.NestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedType, (DescriptorProto type, int index) => new MessageDescriptor(type, file, <>4__this, index, generatedCodeInfo.NestedTypes[index])); this.EnumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumType, (EnumDescriptorProto type, int index) => new EnumDescriptor(type, file, <>4__this, index, generatedCodeInfo.NestedEnums[index])); this.fieldsInDeclarationOrder = DescriptorUtil.ConvertAndMakeReadOnly(proto.Field, delegate(FieldDescriptorProto field, int index) { FileDescriptor file2 = file; MessageDescriptor <>4__this2 = <>4__this; GeneratedClrTypeInfo generatedCodeInfo4 = generatedCodeInfo; return new FieldDescriptor(field, file2, <>4__this2, index, (generatedCodeInfo4 != null) ? generatedCodeInfo4.PropertyNames[index] : null); }); this.fieldsInNumberOrder = new ReadOnlyCollection(this.fieldsInDeclarationOrder.OrderBy((FieldDescriptor field) => field.FieldNumber).ToArray()); this.jsonFieldMap = MessageDescriptor.CreateJsonFieldMap(this.fieldsInNumberOrder); file.DescriptorPool.AddSymbol(this); this.Fields = new MessageDescriptor.FieldCollection(this); } // Token: 0x060005C4 RID: 1476 RVA: 0x000146D8 File Offset: 0x000128D8 private static ReadOnlyDictionary CreateJsonFieldMap(IList fields) { Dictionary dictionary = new Dictionary(); foreach (FieldDescriptor fieldDescriptor in fields) { dictionary[fieldDescriptor.Name] = fieldDescriptor; dictionary[fieldDescriptor.JsonName] = fieldDescriptor; } return new ReadOnlyDictionary(dictionary); } // Token: 0x17000196 RID: 406 // (get) Token: 0x060005C5 RID: 1477 RVA: 0x00014740 File Offset: 0x00012940 public override string Name { get { return this.Proto.Name; } } // Token: 0x17000197 RID: 407 // (get) Token: 0x060005C6 RID: 1478 RVA: 0x0001474D File Offset: 0x0001294D internal DescriptorProto Proto { get; } // Token: 0x17000198 RID: 408 // (get) Token: 0x060005C7 RID: 1479 RVA: 0x00014755 File Offset: 0x00012955 public Type ClrType { get; } // Token: 0x17000199 RID: 409 // (get) Token: 0x060005C8 RID: 1480 RVA: 0x0001475D File Offset: 0x0001295D public MessageParser Parser { get; } // Token: 0x1700019A RID: 410 // (get) Token: 0x060005C9 RID: 1481 RVA: 0x00014765 File Offset: 0x00012965 internal bool IsWellKnownType { get { return base.File.Package == "google.protobuf" && MessageDescriptor.WellKnownTypeNames.Contains(base.File.Name); } } // Token: 0x1700019B RID: 411 // (get) Token: 0x060005CA RID: 1482 RVA: 0x00014795 File Offset: 0x00012995 internal bool IsWrapperType { get { return base.File.Package == "google.protobuf" && base.File.Name == "google/protobuf/wrappers.proto"; } } // Token: 0x1700019C RID: 412 // (get) Token: 0x060005CB RID: 1483 RVA: 0x000147C5 File Offset: 0x000129C5 public MessageDescriptor ContainingType { get; } // Token: 0x1700019D RID: 413 // (get) Token: 0x060005CC RID: 1484 RVA: 0x000147CD File Offset: 0x000129CD public MessageDescriptor.FieldCollection Fields { get; } // Token: 0x1700019E RID: 414 // (get) Token: 0x060005CD RID: 1485 RVA: 0x000147D5 File Offset: 0x000129D5 public IList NestedTypes { get; } // Token: 0x1700019F RID: 415 // (get) Token: 0x060005CE RID: 1486 RVA: 0x000147DD File Offset: 0x000129DD public IList EnumTypes { get; } // Token: 0x170001A0 RID: 416 // (get) Token: 0x060005CF RID: 1487 RVA: 0x000147E5 File Offset: 0x000129E5 public IList Oneofs { get; } // Token: 0x060005D0 RID: 1488 RVA: 0x000147ED File Offset: 0x000129ED public FieldDescriptor FindFieldByName(string name) { return base.File.DescriptorPool.FindSymbol(base.FullName + "." + name); } // Token: 0x060005D1 RID: 1489 RVA: 0x00014810 File Offset: 0x00012A10 public FieldDescriptor FindFieldByNumber(int number) { return base.File.DescriptorPool.FindFieldByNumber(this, number); } // Token: 0x060005D2 RID: 1490 RVA: 0x00014824 File Offset: 0x00012A24 public T FindDescriptor(string name) where T : class, IDescriptor { return base.File.DescriptorPool.FindSymbol(base.FullName + "." + name); } // Token: 0x060005D3 RID: 1491 RVA: 0x00014848 File Offset: 0x00012A48 internal void CrossLink() { foreach (MessageDescriptor messageDescriptor in this.NestedTypes) { messageDescriptor.CrossLink(); } foreach (FieldDescriptor fieldDescriptor in this.fieldsInDeclarationOrder) { fieldDescriptor.CrossLink(); } foreach (OneofDescriptor oneofDescriptor in this.Oneofs) { oneofDescriptor.CrossLink(); } } // Token: 0x04000244 RID: 580 private static readonly HashSet WellKnownTypeNames = new HashSet { "google/protobuf/any.proto", "google/protobuf/api.proto", "google/protobuf/duration.proto", "google/protobuf/empty.proto", "google/protobuf/wrappers.proto", "google/protobuf/timestamp.proto", "google/protobuf/field_mask.proto", "google/protobuf/source_context.proto", "google/protobuf/struct.proto", "google/protobuf/type.proto" }; // Token: 0x04000245 RID: 581 private readonly IList fieldsInDeclarationOrder; // Token: 0x04000246 RID: 582 private readonly IList fieldsInNumberOrder; // Token: 0x04000247 RID: 583 private readonly IDictionary jsonFieldMap; // Token: 0x020000C1 RID: 193 public sealed class FieldCollection { // Token: 0x0600076E RID: 1902 RVA: 0x000176C7 File Offset: 0x000158C7 internal FieldCollection(MessageDescriptor messageDescriptor) { this.messageDescriptor = messageDescriptor; } // Token: 0x0600076F RID: 1903 RVA: 0x000176D6 File Offset: 0x000158D6 public IList InDeclarationOrder() { return this.messageDescriptor.fieldsInDeclarationOrder; } // Token: 0x06000770 RID: 1904 RVA: 0x000176E3 File Offset: 0x000158E3 public IList InFieldNumberOrder() { return this.messageDescriptor.fieldsInNumberOrder; } // Token: 0x06000771 RID: 1905 RVA: 0x000176F0 File Offset: 0x000158F0 internal IDictionary ByJsonName() { return this.messageDescriptor.jsonFieldMap; } // Token: 0x170001D2 RID: 466 public FieldDescriptor this[int number] { get { FieldDescriptor fieldDescriptor = this.messageDescriptor.FindFieldByNumber(number); if (fieldDescriptor == null) { throw new KeyNotFoundException("No such field number"); } return fieldDescriptor; } } // Token: 0x170001D3 RID: 467 public FieldDescriptor this[string name] { get { FieldDescriptor fieldDescriptor = this.messageDescriptor.FindFieldByName(name); if (fieldDescriptor == null) { throw new KeyNotFoundException("No such field name"); } return fieldDescriptor; } } // Token: 0x040002F7 RID: 759 private readonly MessageDescriptor messageDescriptor; } } }