From e81a9d7c87380028b72cd77d48e767705ee224b5 Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Tue, 24 Feb 2009 16:50:56 +0000 Subject: Added ToBuilder and WeakToBuilder --- src/ProtocolBuffers/AbstractMessage.cs | 5 +++++ src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs | 2 ++ .../DescriptorProtos/DescriptorProtoFile.cs | 18 ++++++++++++++++++ src/ProtocolBuffers/DynamicMessage.cs | 5 ++++- src/ProtocolBuffers/FieldSet.cs | 3 +-- src/ProtocolBuffers/IMessage.cs | 15 ++++++++++++++- 6 files changed, 44 insertions(+), 4 deletions(-) (limited to 'src/ProtocolBuffers') diff --git a/src/ProtocolBuffers/AbstractMessage.cs b/src/ProtocolBuffers/AbstractMessage.cs index 0a69f294..11bb948e 100644 --- a/src/ProtocolBuffers/AbstractMessage.cs +++ b/src/ProtocolBuffers/AbstractMessage.cs @@ -58,12 +58,17 @@ namespace Google.ProtocolBuffers { public abstract UnknownFieldSet UnknownFields { get; } public abstract TMessage DefaultInstanceForType { get; } public abstract TBuilder CreateBuilderForType(); + public abstract TBuilder ToBuilder(); #endregion public IBuilder WeakCreateBuilderForType() { return CreateBuilderForType(); } + public IBuilder WeakToBuilder() { + return ToBuilder(); + } + public IMessage WeakDefaultInstanceForType { get { return DefaultInstanceForType; } } diff --git a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs index 09733c3b..be8a11db 100644 --- a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs +++ b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs @@ -143,6 +143,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(CSharpFileOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -334,6 +335,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(CSharpFieldOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs index 1fe7928c..927d4ae3 100644 --- a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs +++ b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs @@ -279,6 +279,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(FileDescriptorSet prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -631,6 +632,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(FileDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1165,6 +1167,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(ExtensionRange prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1478,6 +1481,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(DescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2099,6 +2103,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(FieldDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2541,6 +2546,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(EnumDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2863,6 +2869,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(EnumValueDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -3167,6 +3174,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(ServiceDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -3504,6 +3512,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(MethodDescriptorProto prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -3876,6 +3885,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(FileOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -4223,6 +4233,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(MessageOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -4528,6 +4539,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(FieldOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -4834,6 +4846,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(EnumOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5059,6 +5072,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(EnumValueOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5284,6 +5298,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(ServiceOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5509,6 +5524,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(MethodOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5766,6 +5782,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(NamePart prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -6045,6 +6062,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); } public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } public override Builder CreateBuilderForType() { return new Builder(); } public static Builder CreateBuilder(UninterpretedOption prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers/DynamicMessage.cs b/src/ProtocolBuffers/DynamicMessage.cs index b740013b..4b3a4060 100644 --- a/src/ProtocolBuffers/DynamicMessage.cs +++ b/src/ProtocolBuffers/DynamicMessage.cs @@ -74,7 +74,6 @@ namespace Google.ProtocolBuffers { Builder builder = CreateBuilder(type); Builder dynamicBuilder = builder.MergeFrom(input); return dynamicBuilder.BuildParsed(); - } /// @@ -247,6 +246,10 @@ namespace Google.ProtocolBuffers { return new Builder(type); } + public override Builder ToBuilder() { + return CreateBuilderForType().MergeFrom(this); + } + /// /// Verifies that the field is a field of this message. /// diff --git a/src/ProtocolBuffers/FieldSet.cs b/src/ProtocolBuffers/FieldSet.cs index 913dede2..39b2a696 100644 --- a/src/ProtocolBuffers/FieldSet.cs +++ b/src/ProtocolBuffers/FieldSet.cs @@ -326,8 +326,7 @@ namespace Google.ProtocolBuffers { } } else if (field.MappedType == MappedType.Message && existingValue != null) { IMessage existingMessage = (IMessage)existingValue; - IMessage merged = existingMessage.WeakCreateBuilderForType() - .WeakMergeFrom(existingMessage) + IMessage merged = existingMessage.WeakToBuilder() .WeakMergeFrom((IMessage) entry.Value) .WeakBuild(); this[field] = merged; diff --git a/src/ProtocolBuffers/IMessage.cs b/src/ProtocolBuffers/IMessage.cs index a29313fb..e87bb52c 100644 --- a/src/ProtocolBuffers/IMessage.cs +++ b/src/ProtocolBuffers/IMessage.cs @@ -168,11 +168,18 @@ namespace Google.ProtocolBuffers { /// /// Creates a builder for the type, but in a weakly typed manner. This - /// is typically implemented by strongly typed builders by just returning + /// is typically implemented by strongly typed messages by just returning /// the result of CreateBuilderForType. /// IBuilder WeakCreateBuilderForType(); + /// + /// Creates a builder with the same contents as this message. This + /// is typically implemented by strongly typed messages by just returning + /// the result of ToBuilder. + /// + IBuilder WeakToBuilder(); + IMessage WeakDefaultInstanceForType { get; } } @@ -198,6 +205,12 @@ namespace Google.ProtocolBuffers { /// Constructs a new builder for a message of the same type as this message. /// TBuilder CreateBuilderForType(); + /// + /// Creates a builder with the same contents as this current instance. + /// This is typically implemented by strongly typed messages by just + /// returning the result of ToBuilder(). + /// + TBuilder ToBuilder(); #endregion } } -- cgit v1.2.3