aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs')
-rw-r--r--csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs45
1 files changed, 23 insertions, 22 deletions
diff --git a/csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs
index ab3b76ec..8418948f 100644
--- a/csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs
+++ b/csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs
@@ -31,48 +31,49 @@
#endregion
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using Google.Protobuf.DescriptorProtos;
namespace Google.Protobuf.Descriptors
{
- public sealed class OneofDescriptor
+ public sealed class OneofDescriptor : DescriptorBase
{
- private int index;
- private OneofDescriptorProto proto;
- private FileDescriptor file;
+ private readonly OneofDescriptorProto proto;
private MessageDescriptor containingType;
- internal int fieldCount;
- internal IList<FieldDescriptor> fields;
+ private IList<FieldDescriptor> fields;
- internal OneofDescriptor(OneofDescriptorProto proto, FileDescriptor file,
- MessageDescriptor parent, int index)
+ internal OneofDescriptor(OneofDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index)
+ : base(file, file.ComputeFullName(parent, proto.Name), index)
{
this.proto = proto;
- this.file = file;
- this.index = index;
-
containingType = parent;
- fieldCount = 0;
- }
- public int Index
- {
- get { return index; }
+ file.DescriptorPool.AddSymbol(this);
}
+ /// <summary>
+ /// The brief name of the descriptor's target.
+ /// </summary>
+ public override string Name { get { return proto.Name; } }
+
public MessageDescriptor ContainingType
{
get { return containingType; }
}
- public int FieldCount
- {
- get { return fieldCount; }
- }
+ public IList<FieldDescriptor> Fields { get { return fields; } }
- public FieldDescriptor Field(int index)
+ internal void CrossLink()
{
- return fields[index];
+ List<FieldDescriptor> fieldCollection = new List<FieldDescriptor>();
+ foreach (var field in ContainingType.Fields)
+ {
+ if (field.ContainingOneof == this)
+ {
+ fieldCollection.Add(field);
+ }
+ }
+ fields = new ReadOnlyCollection<FieldDescriptor>(fieldCollection);
}
}
}