using System; using System.Collections.Generic; using System.Text; using Google.ProtocolBuffers.Collections; using Google.ProtocolBuffers.Descriptors; namespace Google.ProtocolBuffers { /// /// All generated protocol message builder classes extend this class. It implements /// most of the IBuilder interface using reflection. Users can ignore this class /// as an implementation detail. /// public abstract class GeneratedBuilder : AbstractBuilder, IBuilder where TMessage : GeneratedMessage where TBuilder : GeneratedBuilder, IBuilder { /// /// Returns the message being built at the moment. /// protected abstract GeneratedMessage MessageBeingBuilt { get; } public override bool Initialized { get { return MessageBeingBuilt.IsInitialized; } } public override IDictionary AllFields { get { return MessageBeingBuilt.AllFields; } } public override object this[FieldDescriptor field] { get { // For repeated fields, the underlying list object is still modifiable at this point. // Make sure not to expose the modifiable list to the caller. return field.IsRepeated ? MessageBeingBuilt.InternalFieldAccessors[field].GetRepeatedWrapper(this) : MessageBeingBuilt[field]; } set { MessageBeingBuilt.InternalFieldAccessors[field].SetValue(this, value); } } public override MessageDescriptor DescriptorForType { get { return MessageBeingBuilt.DescriptorForType; } } public override int GetRepeatedFieldCount(FieldDescriptor field) { return MessageBeingBuilt.GetRepeatedFieldCount(field); } public override object this[FieldDescriptor field, int index] { get { return MessageBeingBuilt[field, index]; } set { MessageBeingBuilt.InternalFieldAccessors[field].SetRepeated(this, index, value); } } public override bool HasField(FieldDescriptor field) { return MessageBeingBuilt.HasField(field); } protected override IMessage BuildImpl() { return Build(); } protected override IMessage BuildPartialImpl() { return BuildPartial(); } protected override IBuilder CloneImpl() { return Clone(); } protected override IMessage DefaultInstanceForTypeImpl { get { return DefaultInstanceForType; } } protected override IBuilder CreateBuilderForFieldImpl(FieldDescriptor field) { return CreateBuilderForField(field); } protected override IBuilder ClearFieldImpl(FieldDescriptor field) { return ClearField(field); } protected override IBuilder AddRepeatedFieldImpl(FieldDescriptor field, object value) { return AddRepeatedField(field, value); } public new abstract IBuilder Clear(); public IBuilder MergeFrom(IMessage other) { throw new NotImplementedException(); } public abstract TMessage Build(); public abstract TMessage BuildPartial(); public abstract IBuilder Clone(); IBuilder IBuilder.MergeFrom(CodedInputStream input) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(CodedInputStream input, ExtensionRegistry extensionRegistry) { throw new NotImplementedException(); } public TMessage DefaultInstanceForType { get { throw new NotImplementedException(); } } public IBuilder CreateBuilderForField(FieldDescriptor field) { throw new NotImplementedException(); } public IBuilder ClearField(FieldDescriptor field) { MessageBeingBuilt.InternalFieldAccessors[field].Clear(this); return this; } public IBuilder AddRepeatedField(FieldDescriptor field, object value) { return this; } public new IBuilder MergeUnknownFields(UnknownFieldSet unknownFields) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(ByteString data) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(ByteString data, ExtensionRegistry extensionRegistry) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(byte[] data) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(byte[] data, ExtensionRegistry extensionRegistry) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(System.IO.Stream input) { throw new NotImplementedException(); } IBuilder IBuilder.MergeFrom(System.IO.Stream input, ExtensionRegistry extensionRegistry) { throw new NotImplementedException(); } } }