Files
2026-06-04 11:42:34 +02:00

220 lines
8.4 KiB
C#

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<OneofDescriptorProto, OneofDescriptor>(proto.OneofDecl, (OneofDescriptorProto oneof, int index) => new OneofDescriptor(oneof, file, <>4__this, index, generatedCodeInfo.OneofNames[index]));
this.NestedTypes = DescriptorUtil.ConvertAndMakeReadOnly<DescriptorProto, MessageDescriptor>(proto.NestedType, (DescriptorProto type, int index) => new MessageDescriptor(type, file, <>4__this, index, generatedCodeInfo.NestedTypes[index]));
this.EnumTypes = DescriptorUtil.ConvertAndMakeReadOnly<EnumDescriptorProto, EnumDescriptor>(proto.EnumType, (EnumDescriptorProto type, int index) => new EnumDescriptor(type, file, <>4__this, index, generatedCodeInfo.NestedEnums[index]));
this.fieldsInDeclarationOrder = DescriptorUtil.ConvertAndMakeReadOnly<FieldDescriptorProto, FieldDescriptor>(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<FieldDescriptor>(this.fieldsInDeclarationOrder.OrderBy((FieldDescriptor field) => field.FieldNumber).ToArray<FieldDescriptor>());
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<string, FieldDescriptor> CreateJsonFieldMap(IList<FieldDescriptor> fields)
{
Dictionary<string, FieldDescriptor> dictionary = new Dictionary<string, FieldDescriptor>();
foreach (FieldDescriptor fieldDescriptor in fields)
{
dictionary[fieldDescriptor.Name] = fieldDescriptor;
dictionary[fieldDescriptor.JsonName] = fieldDescriptor;
}
return new ReadOnlyDictionary<string, FieldDescriptor>(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<MessageDescriptor> NestedTypes { get; }
// Token: 0x1700019F RID: 415
// (get) Token: 0x060005CE RID: 1486 RVA: 0x000147DD File Offset: 0x000129DD
public IList<EnumDescriptor> EnumTypes { get; }
// Token: 0x170001A0 RID: 416
// (get) Token: 0x060005CF RID: 1487 RVA: 0x000147E5 File Offset: 0x000129E5
public IList<OneofDescriptor> Oneofs { get; }
// Token: 0x060005D0 RID: 1488 RVA: 0x000147ED File Offset: 0x000129ED
public FieldDescriptor FindFieldByName(string name)
{
return base.File.DescriptorPool.FindSymbol<FieldDescriptor>(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<T>(string name) where T : class, IDescriptor
{
return base.File.DescriptorPool.FindSymbol<T>(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<string> WellKnownTypeNames = new HashSet<string> { "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<FieldDescriptor> fieldsInDeclarationOrder;
// Token: 0x04000246 RID: 582
private readonly IList<FieldDescriptor> fieldsInNumberOrder;
// Token: 0x04000247 RID: 583
private readonly IDictionary<string, FieldDescriptor> 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<FieldDescriptor> InDeclarationOrder()
{
return this.messageDescriptor.fieldsInDeclarationOrder;
}
// Token: 0x06000770 RID: 1904 RVA: 0x000176E3 File Offset: 0x000158E3
public IList<FieldDescriptor> InFieldNumberOrder()
{
return this.messageDescriptor.fieldsInNumberOrder;
}
// Token: 0x06000771 RID: 1905 RVA: 0x000176F0 File Offset: 0x000158F0
internal IDictionary<string, FieldDescriptor> 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;
}
}
}