diff --git a/src/AddressBook/AddressBookProtos.cs b/src/AddressBook/AddressBookProtos.cs index 4851ae4c51..701e0165db 100644 --- a/src/AddressBook/AddressBookProtos.cs +++ b/src/AddressBook/AddressBookProtos.cs @@ -179,6 +179,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { 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(PhoneNumber prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -435,6 +436,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { 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(Person prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -732,6 +734,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { 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(AddressBook prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtoBench/BenchmarkProtoFile.cs b/src/ProtoBench/BenchmarkProtoFile.cs index e0a062920f..95cd165079 100644 --- a/src/ProtoBench/BenchmarkProtoFile.cs +++ b/src/ProtoBench/BenchmarkProtoFile.cs @@ -525,6 +525,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Message1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1568,6 +1569,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Message2 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2194,6 +2196,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Group1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2886,6 +2889,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Message3 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -3670,6 +3674,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Message4 prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtoBench/BenchmarkSpeedProtoFile.cs b/src/ProtoBench/BenchmarkSpeedProtoFile.cs index df0d52ee9d..5c5e28413a 100644 --- a/src/ProtoBench/BenchmarkSpeedProtoFile.cs +++ b/src/ProtoBench/BenchmarkSpeedProtoFile.cs @@ -803,6 +803,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(SpeedMessage1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2320,6 +2321,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(SpeedMessage2 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -3267,6 +3269,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(Group1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -4339,6 +4342,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(SpeedMessage3 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5463,6 +5467,7 @@ namespace Google.ProtocolBuffers.ProtoBench { 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(SpeedMessage4 prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtoGen/MessageGenerator.cs b/src/ProtoGen/MessageGenerator.cs index 3c26569ec6..63b8f32031 100644 --- a/src/ProtoGen/MessageGenerator.cs +++ b/src/ProtoGen/MessageGenerator.cs @@ -267,6 +267,7 @@ namespace Google.ProtocolBuffers.ProtoGen { private void GenerateBuilder(TextGenerator writer) { writer.WriteLine("public static Builder CreateBuilder() { return new Builder(); }"); + writer.WriteLine("public override Builder ToBuilder() { return CreateBuilder(this); }"); writer.WriteLine("public override Builder CreateBuilderForType() { return new Builder(); }"); writer.WriteLine("public static Builder CreateBuilder({0} prototype) {{", ClassName); writer.WriteLine(" return (Builder) new Builder().MergeFrom(prototype);"); diff --git a/src/ProtocolBuffers.Test/AbstractMessageTest.cs b/src/ProtocolBuffers.Test/AbstractMessageTest.cs index b77264f27e..ca34ac8aeb 100644 --- a/src/ProtocolBuffers.Test/AbstractMessageTest.cs +++ b/src/ProtocolBuffers.Test/AbstractMessageTest.cs @@ -297,6 +297,10 @@ namespace Google.ProtocolBuffers { return new Builder(wrappedMessage.WeakCreateBuilderForType()); } + public override Builder ToBuilder() { + return new Builder(wrappedMessage.WeakToBuilder()); + } + internal class Builder : AbstractBuilder { private readonly IBuilder wrappedBuilder; diff --git a/src/ProtocolBuffers.Test/DynamicMessageTest.cs b/src/ProtocolBuffers.Test/DynamicMessageTest.cs index 89193ad23c..edcce38ea0 100644 --- a/src/ProtocolBuffers.Test/DynamicMessageTest.cs +++ b/src/ProtocolBuffers.Test/DynamicMessageTest.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Google.ProtocolBuffers.TestProtos; // Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. @@ -173,5 +174,26 @@ namespace Google.ProtocolBuffers { DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build(); reflectionTester.AssertAllFieldsSetViaReflection(copy); } + + [Test] + public void ToBuilder() { + DynamicMessage.Builder builder = + DynamicMessage.CreateBuilder(TestAllTypes.Descriptor); + reflectionTester.SetAllFieldsViaReflection(builder); + int unknownFieldNum = 9; + ulong unknownFieldVal = 90; + builder.SetUnknownFields(UnknownFieldSet.CreateBuilder() + .AddField(unknownFieldNum, + UnknownField.CreateBuilder().AddVarint(unknownFieldVal).Build()) + .Build()); + DynamicMessage message = builder.Build(); + + DynamicMessage derived = message.ToBuilder().Build(); + reflectionTester.AssertAllFieldsSetViaReflection(derived); + + IList values = derived.UnknownFields.FieldDictionary[unknownFieldNum].VarintList; + Assert.AreEqual(1, values.Count); + Assert.AreEqual(unknownFieldVal, values[0]); + } } } diff --git a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs index 80923ca065..610078f2d4 100644 --- a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs +++ b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs @@ -385,5 +385,13 @@ namespace Google.ProtocolBuffers { Assert.IsTrue(builder.IsInitialized); Assert.IsTrue(builder.BuildPartial().IsInitialized); } + + [Test] + public void ToBuilder() { + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + TestUtil.SetAllFields(builder); + TestAllTypes message = builder.Build(); + TestUtil.AssertAllFieldsSet(message.ToBuilder().Build()); + } } } diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs index 2eaeb05cc6..f7c971722f 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs @@ -344,6 +344,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMessageWithCustomOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -453,6 +454,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(CustomOptionFooRequest prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -543,6 +545,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(CustomOptionFooResponse prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -643,6 +646,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(DummyMessageContainingEnum prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -733,6 +737,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(DummyMessageInvalidAsOptionType prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -823,6 +828,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(CustomOptionMinIntegerValues prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -913,6 +919,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(CustomOptionMaxIntegerValues prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1003,6 +1010,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(CustomOptionOtherValues prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1093,6 +1101,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(SettingRealsFromPositiveInts prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1183,6 +1192,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(SettingRealsFromNegativeInts prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1282,6 +1292,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOptionType1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1425,6 +1436,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOptionType4 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1541,6 +1553,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOptionType2 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1754,6 +1767,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOptionType5 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1861,6 +1875,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOptionType3 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2014,6 +2029,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ComplexOpt6 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2122,6 +2138,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(VariousComplexOptions prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs index 5af7fd8ea0..8aca3997e5 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs @@ -146,6 +146,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestEmbedOptimizedForSize prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs index 3ec0b64c36..9b5f828a21 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs @@ -129,6 +129,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ImportMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs index 88e10f6c1e..e97b27aa06 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs @@ -143,6 +143,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMessageSet prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -311,6 +312,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMessageSetContainer prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -528,6 +530,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMessageSetExtension1 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -722,6 +725,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMessageSetExtension2 prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -956,6 +960,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(Item prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1157,6 +1162,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(RawMessageSet prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs index 777a4c23f1..837c8f0476 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs @@ -122,6 +122,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestOptimizedForSize prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -275,6 +276,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestRequiredOptimizedForSize prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -392,6 +394,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestOptionalOptimizedForSize prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs index f8c2a7ccea..d0394b866c 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs @@ -838,6 +838,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(NestedMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1030,6 +1031,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(OptionalGroup prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -1222,6 +1224,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(RepeatedGroup prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -2580,6 +2583,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestAllTypes prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -4872,6 +4876,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(ForeignMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5053,6 +5058,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestAllExtensions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5221,6 +5227,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(OptionalGroup_extension prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -5413,6 +5420,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(RepeatedGroup_extension prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -6093,6 +6101,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestRequired prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -7123,6 +7132,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestRequiredForeign prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -7411,6 +7421,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestForeignNested prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -7611,6 +7622,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestEmptyMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -7767,6 +7779,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestEmptyMessageWithExtensions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -7950,6 +7963,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestReallyLargeTagNumber prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -8182,6 +8196,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestRecursiveMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -8422,6 +8437,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMutualRecursionA prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -8652,6 +8668,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestMutualRecursionB prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -8916,6 +8933,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(Foo prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -9108,6 +9126,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(Bar prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -9311,6 +9330,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestDupFieldNumber prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -9649,6 +9669,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(NestedMessage prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -9879,6 +9900,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestNestedMessageHasBits prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -10308,6 +10330,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestCamelCaseFieldNames prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -10920,6 +10943,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestFieldOrderings prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -11239,6 +11263,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestExtremeDefaultValues prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -11937,6 +11962,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestPackedTypes prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -12644,6 +12670,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(TestPackedExtensions prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -12797,6 +12824,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(FooRequest prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -12949,6 +12977,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(FooResponse prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -13101,6 +13130,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(BarRequest prototype) { return (Builder) new Builder().MergeFrom(prototype); @@ -13253,6 +13283,7 @@ namespace Google.ProtocolBuffers.TestProtos { 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(BarResponse prototype) { return (Builder) new Builder().MergeFrom(prototype); diff --git a/src/ProtocolBuffers/AbstractMessage.cs b/src/ProtocolBuffers/AbstractMessage.cs index 0a69f2947f..11bb948e62 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 09733c3bda..be8a11dbfe 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 1fe7928c7c..927d4ae39e 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 b740013b1d..4b3a406062 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 913dede276..39b2a6962f 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 a29313fbc1..e87bb52cd5 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 } }