Browse Source

Fully converted over to ICodedOutputStream for all WriteTo derivations

csharptest 15 năm trước cách đây
mục cha
commit
ffafdaa0f9
35 tập tin đã thay đổi với 411 bổ sung409 xóa
  1. 5 5
      src/AddressBook/AddressBookProtos.cs
  2. 1 1
      src/ProtoGen/MessageGenerator.cs
  3. 7 1
      src/ProtoGen/RepeatedMessageFieldGenerator.cs
  4. 1 1
      src/ProtocolBuffers.Test/TestProtos/UnitTestCSharpOptionsProtoFile.cs
  5. 17 17
      src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs
  6. 2 2
      src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs
  7. 6 6
      src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
  8. 1 1
      src/ProtocolBuffers.Test/TestProtos/UnitTestImportLiteProtoFile.cs
  9. 1 1
      src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs
  10. 7 7
      src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs
  11. 1 1
      src/ProtocolBuffers.Test/TestProtos/UnitTestNoGenericServicesProtoFile.cs
  12. 47 47
      src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs
  13. 5 5
      src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
  14. 6 6
      src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
  15. 22 20
      src/ProtocolBuffers/AbstractMessage.cs
  16. 3 3
      src/ProtocolBuffers/AbstractMessageLite.cs
  17. 1 13
      src/ProtocolBuffers/CodedOutputStream.cs
  18. 4 4
      src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
  19. 38 38
      src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
  20. 1 1
      src/ProtocolBuffers/DynamicMessage.cs
  21. 1 1
      src/ProtocolBuffers/ExtendableMessage.cs
  22. 1 1
      src/ProtocolBuffers/ExtendableMessageLite.cs
  23. 25 23
      src/ProtocolBuffers/FieldSet.cs
  24. 4 2
      src/ProtocolBuffers/ICodedOutputStream.cs
  25. 4 4
      src/ProtocolBuffers/IMessage.cs
  26. 4 4
      src/ProtocolBuffers/IMessageLite.cs
  27. 115 113
      src/ProtocolBuffers/ProtocolBuffersLite.csproj
  28. 3 3
      src/ProtocolBuffers/UnknownField.cs
  29. 5 5
      src/ProtocolBuffers/UnknownFieldSet.cs
  30. 7 7
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
  31. 1 1
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportLiteProtoFile.cs
  32. 1 1
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportProtoFile.cs
  33. 1 1
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
  34. 16 16
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
  35. 47 47
      src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs

+ 5 - 5
src/AddressBook/AddressBookProtos.cs

@@ -152,7 +152,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasNumber) {
           if (HasNumber) {
             output.WriteString(1, "number", Number);
             output.WriteString(1, "number", Number);
@@ -428,7 +428,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
@@ -440,7 +440,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook {
         output.WriteString(3, "email", Email);
         output.WriteString(3, "email", Email);
       }
       }
       if (phone_.Count > 0) {
       if (phone_.Count > 0) {
-        output.WriteMessageArray(4, "phone", phone_);
+        output.WriteArray(pbd::FieldType.Message, 4, "phone", phone_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -772,10 +772,10 @@ namespace Google.ProtocolBuffers.Examples.AddressBook {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (person_.Count > 0) {
       if (person_.Count > 0) {
-        output.WriteMessageArray(1, "person", person_);
+        output.WriteArray(pbd::FieldType.Message, 1, "person", person_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }

+ 1 - 1
src/ProtoGen/MessageGenerator.cs

@@ -291,7 +291,7 @@ namespace Google.ProtocolBuffers.ProtoGen
             List<ExtensionRange> sortedExtensions = new List<ExtensionRange>(Descriptor.Proto.ExtensionRangeList);
             List<ExtensionRange> sortedExtensions = new List<ExtensionRange>(Descriptor.Proto.ExtensionRangeList);
             sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start)));
             sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start)));
 
 
-            writer.WriteLine("public override void WriteTo(pb::CodedOutputStream output) {");
+            writer.WriteLine("public override void WriteTo(pb::ICodedOutputStream output) {");
             writer.Indent();
             writer.Indent();
             // Make sure we've computed the serialized length, so that packed fields are generated correctly.
             // Make sure we've computed the serialized length, so that packed fields are generated correctly.
             writer.WriteLine("int size = SerializedSize;");
             writer.WriteLine("int size = SerializedSize;");

+ 7 - 1
src/ProtoGen/RepeatedMessageFieldGenerator.cs

@@ -137,7 +137,13 @@ namespace Google.ProtocolBuffers.ProtoGen
         {
         {
             writer.WriteLine("if ({0}_.Count > 0) {{", Name);
             writer.WriteLine("if ({0}_.Count > 0) {{", Name);
             writer.Indent();
             writer.Indent();
-            writer.WriteLine("output.Write{0}Array({1}, \"{3}\", {2}_);", MessageOrGroup, Number, Name, Descriptor.Name);
+
+            // Arrays of message types do not currently support 'packed' storage
+            //if (Descriptor.IsPacked)
+            //    writer.WriteLine("output.WritePackedArray(pbd::FieldType.{3}, {0}, \"{2}\", {1}MemoizedSerializedSize, {1}_);", Number, Name, Descriptor.Name, Descriptor.FieldType);
+            //else
+            writer.WriteLine("output.WriteArray(pbd::FieldType.{3}, {0}, \"{2}\", {1}_);", Number, Name, Descriptor.Name, Descriptor.FieldType);
+
             //writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);
             //writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);
             //writer.WriteLine("  output.Write{0}({1}, element);", MessageOrGroup, Number);
             //writer.WriteLine("  output.Write{0}({1}, element);", MessageOrGroup, Number);
             //writer.WriteLine("}");
             //writer.WriteLine("}");

+ 1 - 1
src/ProtocolBuffers.Test/TestProtos/UnitTestCSharpOptionsProtoFile.cs

@@ -115,7 +115,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasNormal) {
       if (HasNormal) {
         output.WriteString(1, "normal", Normal);
         output.WriteString(1, "normal", Normal);

+ 17 - 17
src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs

@@ -450,7 +450,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasField1) {
       if (HasField1) {
         output.WriteString(1, "field1", Field1);
         output.WriteString(1, "field1", Field1);
@@ -662,7 +662,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -842,7 +842,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1037,7 +1037,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1217,7 +1217,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1397,7 +1397,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1577,7 +1577,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1757,7 +1757,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -1937,7 +1937,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -2117,7 +2117,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -2328,7 +2328,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasFoo) {
       if (HasFoo) {
@@ -2647,7 +2647,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasWaldo) {
           if (HasWaldo) {
             output.WriteInt32(1, "waldo", Waldo);
             output.WriteInt32(1, "waldo", Waldo);
@@ -2870,7 +2870,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasBar) {
       if (HasBar) {
@@ -3233,7 +3233,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasPlugh) {
           if (HasPlugh) {
             output.WriteInt32(3, "plugh", Plugh);
             output.WriteInt32(3, "plugh", Plugh);
@@ -3442,7 +3442,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasQux) {
       if (HasQux) {
         output.WriteInt32(1, "qux", Qux);
         output.WriteInt32(1, "qux", Qux);
@@ -3717,7 +3717,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasXyzzy) {
       if (HasXyzzy) {
         output.WriteInt32(7593951, "xyzzy", Xyzzy);
         output.WriteInt32(7593951, "xyzzy", Xyzzy);
@@ -3928,7 +3928,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }

+ 2 - 2
src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs

@@ -117,13 +117,13 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalMessage) {
       if (HasOptionalMessage) {
         output.WriteMessage(1, "optional_message", OptionalMessage);
         output.WriteMessage(1, "optional_message", OptionalMessage);
       }
       }
       if (repeatedMessage_.Count > 0) {
       if (repeatedMessage_.Count > 0) {
-        output.WriteMessageArray(2, "repeated_message", repeatedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 2, "repeated_message", repeatedMessage_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }

+ 6 - 6
src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs

@@ -579,7 +579,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasField1) {
       if (HasField1) {
         output.WriteString(1, "field1", Field1);
         output.WriteString(1, "field1", Field1);
@@ -2282,7 +2282,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasField1) {
       if (HasField1) {
         output.WriteInt32(1, "field1", Field1);
         output.WriteInt32(1, "field1", Field1);
@@ -3291,7 +3291,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasField5) {
           if (HasField5) {
             output.WriteInt32(5, "field5", Field5);
             output.WriteInt32(5, "field5", Field5);
@@ -4330,7 +4330,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasField1) {
       if (HasField1) {
         output.WriteString(1, "field1", Field1);
         output.WriteString(1, "field1", Field1);
@@ -4348,7 +4348,7 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteString(6, "field6", Field6);
         output.WriteString(6, "field6", Field6);
       }
       }
       if (group1_.Count > 0) {
       if (group1_.Count > 0) {
-        output.WriteGroupArray(10, "group1", group1_);
+        output.WriteArray(pbd::FieldType.Group, 10, "group1", group1_);
       }
       }
       if (HasField21) {
       if (HasField21) {
         output.WriteInt32(21, "field21", Field21);
         output.WriteInt32(21, "field21", Field21);
@@ -5622,7 +5622,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasField1) {
       if (HasField1) {
         output.WriteFloat(1, "field1", Field1);
         output.WriteFloat(1, "field1", Field1);

+ 1 - 1
src/ProtocolBuffers.Test/TestProtos/UnitTestImportLiteProtoFile.cs

@@ -70,7 +70,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasD) {
       if (HasD) {
         output.WriteInt32(1, "d", D);
         output.WriteInt32(1, "d", D);

+ 1 - 1
src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs

@@ -106,7 +106,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasD) {
       if (HasD) {
         output.WriteInt32(1, "d", D);
         output.WriteInt32(1, "d", D);

+ 7 - 7
src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs

@@ -129,7 +129,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -323,7 +323,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasMessageSet) {
       if (HasMessageSet) {
         output.WriteMessage(1, "message_set", MessageSet);
         output.WriteMessage(1, "message_set", MessageSet);
@@ -569,7 +569,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasI) {
       if (HasI) {
         output.WriteInt32(15, "i", I);
         output.WriteInt32(15, "i", I);
@@ -792,7 +792,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasStr) {
       if (HasStr) {
         output.WriteString(25, "str", Str);
         output.WriteString(25, "str", Str);
@@ -1056,7 +1056,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasTypeId) {
           if (HasTypeId) {
             output.WriteInt32(2, "type_id", TypeId);
             output.WriteInt32(2, "type_id", TypeId);
@@ -1289,10 +1289,10 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (item_.Count > 0) {
       if (item_.Count > 0) {
-        output.WriteGroupArray(1, "item", item_);
+        output.WriteArray(pbd::FieldType.Group, 1, "item", item_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }

+ 1 - 1
src/ProtocolBuffers.Test/TestProtos/UnitTestNoGenericServicesProtoFile.cs

@@ -117,7 +117,7 @@ namespace Google.ProtocolBuffers.TestProtos.NoGenericService {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestMessage, TestMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestMessage, TestMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasA) {
       if (HasA) {

+ 47 - 47
src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs

@@ -1103,7 +1103,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasBb) {
           if (HasBb) {
             output.WriteInt32(1, "bb", Bb);
             output.WriteInt32(1, "bb", Bb);
@@ -1324,7 +1324,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(17, "a", A);
             output.WriteInt32(17, "a", A);
@@ -1545,7 +1545,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(47, "a", A);
             output.WriteInt32(47, "a", A);
@@ -2478,7 +2478,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalInt32) {
       if (HasOptionalInt32) {
         output.WriteInt32(1, "optional_int32", OptionalInt32);
         output.WriteInt32(1, "optional_int32", OptionalInt32);
@@ -2598,16 +2598,16 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
       }
       }
       if (repeatedGroup_.Count > 0) {
       if (repeatedGroup_.Count > 0) {
-        output.WriteGroupArray(46, "repeatedgroup", repeatedGroup_);
+        output.WriteArray(pbd::FieldType.Group, 46, "repeatedgroup", repeatedGroup_);
       }
       }
       if (repeatedNestedMessage_.Count > 0) {
       if (repeatedNestedMessage_.Count > 0) {
-        output.WriteMessageArray(48, "repeated_nested_message", repeatedNestedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 48, "repeated_nested_message", repeatedNestedMessage_);
       }
       }
       if (repeatedForeignMessage_.Count > 0) {
       if (repeatedForeignMessage_.Count > 0) {
-        output.WriteMessageArray(49, "repeated_foreign_message", repeatedForeignMessage_);
+        output.WriteArray(pbd::FieldType.Message, 49, "repeated_foreign_message", repeatedForeignMessage_);
       }
       }
       if (repeatedImportMessage_.Count > 0) {
       if (repeatedImportMessage_.Count > 0) {
-        output.WriteMessageArray(50, "repeated_import_message", repeatedImportMessage_);
+        output.WriteArray(pbd::FieldType.Message, 50, "repeated_import_message", repeatedImportMessage_);
       }
       }
       if (repeatedNestedEnum_.Count > 0) {
       if (repeatedNestedEnum_.Count > 0) {
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
@@ -5356,7 +5356,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasDeprecatedInt32) {
       if (HasDeprecatedInt32) {
         output.WriteInt32(1, "deprecated_int32", DeprecatedInt32);
         output.WriteInt32(1, "deprecated_int32", DeprecatedInt32);
@@ -5577,7 +5577,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasC) {
       if (HasC) {
         output.WriteInt32(1, "c", C);
         output.WriteInt32(1, "c", C);
@@ -5789,7 +5789,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -5983,7 +5983,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(17, "a", A);
         output.WriteInt32(17, "a", A);
@@ -6204,7 +6204,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(47, "a", A);
         output.WriteInt32(47, "a", A);
@@ -6417,7 +6417,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -6934,7 +6934,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -8175,13 +8175,13 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalMessage) {
       if (HasOptionalMessage) {
         output.WriteMessage(1, "optional_message", OptionalMessage);
         output.WriteMessage(1, "optional_message", OptionalMessage);
       }
       }
       if (repeatedMessage_.Count > 0) {
       if (repeatedMessage_.Count > 0) {
-        output.WriteMessageArray(2, "repeated_message", repeatedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 2, "repeated_message", repeatedMessage_);
       }
       }
       if (HasDummy) {
       if (HasDummy) {
         output.WriteInt32(3, "dummy", Dummy);
         output.WriteInt32(3, "dummy", Dummy);
@@ -8504,7 +8504,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasForeignNested) {
       if (HasForeignNested) {
         output.WriteMessage(1, "foreign_nested", ForeignNested);
         output.WriteMessage(1, "foreign_nested", ForeignNested);
@@ -8738,7 +8738,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -8919,7 +8919,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -9104,7 +9104,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(43, output);
       extensionWriter.WriteUntil(43, output);
@@ -9310,7 +9310,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -9572,7 +9572,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteMessage(1, "a", A);
         output.WriteMessage(1, "a", A);
@@ -9847,7 +9847,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasBb) {
       if (HasBb) {
         output.WriteMessage(1, "bb", Bb);
         output.WriteMessage(1, "bb", Bb);
@@ -10101,7 +10101,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteMessage(1, "a", A);
         output.WriteMessage(1, "a", A);
@@ -10406,7 +10406,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(1, "a", A);
             output.WriteInt32(1, "a", A);
@@ -10627,7 +10627,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(1, "a", A);
             output.WriteInt32(1, "a", A);
@@ -10846,7 +10846,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -11219,13 +11219,13 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (nestedmessageRepeatedInt32_.Count > 0) {
           if (nestedmessageRepeatedInt32_.Count > 0) {
             output.WriteArray(pbd::FieldType.Int32, 1, "nestedmessage_repeated_int32", nestedmessageRepeatedInt32_);
             output.WriteArray(pbd::FieldType.Int32, 1, "nestedmessage_repeated_int32", nestedmessageRepeatedInt32_);
           }
           }
           if (nestedmessageRepeatedForeignmessage_.Count > 0) {
           if (nestedmessageRepeatedForeignmessage_.Count > 0) {
-            output.WriteMessageArray(2, "nestedmessage_repeated_foreignmessage", nestedmessageRepeatedForeignmessage_);
+            output.WriteArray(pbd::FieldType.Message, 2, "nestedmessage_repeated_foreignmessage", nestedmessageRepeatedForeignmessage_);
           }
           }
           UnknownFields.WriteTo(output);
           UnknownFields.WriteTo(output);
         }
         }
@@ -11486,7 +11486,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalNestedMessage) {
       if (HasOptionalNestedMessage) {
         output.WriteMessage(1, "optional_nested_message", OptionalNestedMessage);
         output.WriteMessage(1, "optional_nested_message", OptionalNestedMessage);
@@ -11852,7 +11852,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasPrimitiveField) {
       if (HasPrimitiveField) {
         output.WriteInt32(1, "PrimitiveField", PrimitiveField);
         output.WriteInt32(1, "PrimitiveField", PrimitiveField);
@@ -11882,7 +11882,7 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteArray(pbd::FieldType.Enum, 9, "RepeatedEnumField", repeatedEnumField_);
         output.WriteArray(pbd::FieldType.Enum, 9, "RepeatedEnumField", repeatedEnumField_);
       }
       }
       if (repeatedMessageField_.Count > 0) {
       if (repeatedMessageField_.Count > 0) {
-        output.WriteMessageArray(10, "RepeatedMessageField", repeatedMessageField_);
+        output.WriteArray(pbd::FieldType.Message, 10, "RepeatedMessageField", repeatedMessageField_);
       }
       }
       if (repeatedStringPieceField_.Count > 0) {
       if (repeatedStringPieceField_.Count > 0) {
         output.WriteArray(pbd::FieldType.String, 11, "RepeatedStringPieceField", repeatedStringPieceField_);
         output.WriteArray(pbd::FieldType.String, 11, "RepeatedStringPieceField", repeatedStringPieceField_);
@@ -12578,7 +12578,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasMyInt) {
       if (HasMyInt) {
@@ -13049,7 +13049,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasEscapedBytes) {
       if (HasEscapedBytes) {
         output.WriteBytes(1, "escaped_bytes", EscapedBytes);
         output.WriteBytes(1, "escaped_bytes", EscapedBytes);
@@ -13834,7 +13834,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasData) {
       if (HasData) {
         output.WriteString(1, "data", Data);
         output.WriteString(1, "data", Data);
@@ -14056,7 +14056,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasData) {
       if (HasData) {
         output.WriteBytes(1, "data", Data);
         output.WriteBytes(1, "data", Data);
@@ -14458,7 +14458,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (packedInt32_.Count > 0) {
       if (packedInt32_.Count > 0) {
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
@@ -15571,7 +15571,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (unpackedInt32_.Count > 0) {
       if (unpackedInt32_.Count > 0) {
         output.WriteArray(pbd::FieldType.Int32, 90, "unpacked_int32", unpackedInt32_);
         output.WriteArray(pbd::FieldType.Int32, 90, "unpacked_int32", unpackedInt32_);
@@ -16398,7 +16398,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -16630,7 +16630,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasDynamicField) {
           if (HasDynamicField) {
             output.WriteInt32(2100, "dynamic_field", DynamicField);
             output.WriteInt32(2100, "dynamic_field", DynamicField);
@@ -16895,7 +16895,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasScalarExtension) {
       if (HasScalarExtension) {
         output.WriteFixed32(2000, "scalar_extension", ScalarExtension);
         output.WriteFixed32(2000, "scalar_extension", ScalarExtension);
@@ -17472,7 +17472,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (repeatedFixed32_.Count > 0) {
       if (repeatedFixed32_.Count > 0) {
         output.WriteArray(pbd::FieldType.Fixed32, 12, "repeated_fixed32", repeatedFixed32_);
         output.WriteArray(pbd::FieldType.Fixed32, 12, "repeated_fixed32", repeatedFixed32_);
@@ -17931,7 +17931,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18111,7 +18111,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18291,7 +18291,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18471,7 +18471,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }

+ 5 - 5
src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs

@@ -120,7 +120,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (criteria_.Count > 0) {
       if (criteria_.Count > 0) {
         output.WriteArray(pbd::FieldType.String, 1, "Criteria", criteria_);
         output.WriteArray(pbd::FieldType.String, 1, "Criteria", criteria_);
@@ -398,7 +398,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasUrl) {
           if (HasUrl) {
             output.WriteString(1, "url", Url);
             output.WriteString(1, "url", Url);
@@ -635,10 +635,10 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (results_.Count > 0) {
       if (results_.Count > 0) {
-        output.WriteMessageArray(1, "results", results_);
+        output.WriteArray(pbd::FieldType.Message, 1, "results", results_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -893,7 +893,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (criteria_.Count > 0) {
       if (criteria_.Count > 0) {
         output.WriteArray(pbd::FieldType.String, 1, "Criteria", criteria_);
         output.WriteArray(pbd::FieldType.String, 1, "Criteria", criteria_);

+ 6 - 6
src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs

@@ -177,7 +177,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (options_.Count > 0) {
       if (options_.Count > 0) {
         output.WriteArray(pbd::FieldType.Enum, 3, "options", options_);
         output.WriteArray(pbd::FieldType.Enum, 3, "options", options_);
@@ -444,7 +444,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -676,7 +676,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (options_.Count > 0) {
           if (options_.Count > 0) {
             output.WriteArray(pbd::FieldType.Enum, 3, "options", options_);
             output.WriteArray(pbd::FieldType.Enum, 3, "options", options_);
@@ -998,7 +998,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasChild) {
       if (HasChild) {
@@ -1018,7 +1018,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
       extensionWriter.WriteUntil(200, output);
       extensionWriter.WriteUntil(200, output);
       if (children_.Count > 0) {
       if (children_.Count > 0) {
-        output.WriteGroupArray(401, "children", children_);
+        output.WriteArray(pbd::FieldType.Group, 401, "children", children_);
       }
       }
       if (textlines_.Count > 0) {
       if (textlines_.Count > 0) {
         output.WriteArray(pbd::FieldType.String, 700, "textlines", textlines_);
         output.WriteArray(pbd::FieldType.String, 700, "textlines", textlines_);
@@ -1487,7 +1487,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasNumber) {
       if (HasNumber) {
         output.WriteInt32(1, "number", Number);
         output.WriteInt32(1, "number", Number);

+ 22 - 20
src/ProtocolBuffers/AbstractMessage.cs

@@ -138,7 +138,7 @@ namespace Google.ProtocolBuffers
         /// of the message before the data, then making sure you limit the input to
         /// of the message before the data, then making sure you limit the input to
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// </remarks>
         /// </remarks>
-        public override void WriteTo(CodedOutputStream output)
+        public override void WriteTo(ICodedOutputStream output)
         {
         {
             foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)
             foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)
             {
             {
@@ -149,26 +149,28 @@ namespace Google.ProtocolBuffers
                     // IEnumerable is the best we can do. (C# generics aren't covariant yet.)
                     // IEnumerable is the best we can do. (C# generics aren't covariant yet.)
                     IEnumerable valueList = (IEnumerable) entry.Value;
                     IEnumerable valueList = (IEnumerable) entry.Value;
                     if (field.IsPacked)
                     if (field.IsPacked)
-                    {
-                        output.WriteTag(field.FieldNumber, WireFormat.WireType.LengthDelimited);
-                        int dataSize = 0;
-                        foreach (object element in valueList)
-                        {
-                            dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);
-                        }
-                        output.WriteRawVarint32((uint) dataSize);
-                        foreach (object element in valueList)
-                        {
-                            output.WriteFieldNoTag(field.FieldType, element);
-                        }
-                    }
+                        output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList);
+                    //{
+                    //    output.WriteTag(field.FieldNumber, WireFormat.WireType.LengthDelimited);
+                    //    int dataSize = 0;
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);
+                    //    }
+                    //    output.WriteRawVarint32((uint) dataSize);
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        output.WriteFieldNoTag(field.FieldType, element);
+                    //    }
+                    //}
                     else
                     else
-                    {
-                        foreach (object element in valueList)
-                        {
-                            output.WriteField(field.FieldType, field.FieldNumber, field.Name, element);
-                        }
-                    }
+                        output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList);
+                    //{
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        output.WriteField(field.FieldType, field.FieldNumber, field.Name, element);
+                    //    }
+                    //}
                 }
                 }
                 else
                 else
                 {
                 {

+ 3 - 3
src/ProtocolBuffers/AbstractMessageLite.cs

@@ -55,7 +55,7 @@ namespace Google.ProtocolBuffers
 
 
         public abstract bool IsInitialized { get; }
         public abstract bool IsInitialized { get; }
 
 
-        public abstract void WriteTo(CodedOutputStream output);
+        public abstract void WriteTo(ICodedOutputStream output);
 
 
         public abstract int SerializedSize { get; }
         public abstract int SerializedSize { get; }
 
 
@@ -71,7 +71,7 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a ByteString. This is a trivial wrapper
         /// Serializes the message to a ByteString. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         public ByteString ToByteString()
         public ByteString ToByteString()
         {
         {
@@ -82,7 +82,7 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a byte array. This is a trivial wrapper
         /// Serializes the message to a byte array. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         public byte[] ToByteArray()
         public byte[] ToByteArray()
         {
         {

+ 1 - 13
src/ProtocolBuffers/CodedOutputStream.cs

@@ -308,7 +308,7 @@ namespace Google.ProtocolBuffers
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);
         }
         }
 
 
-        public void WriteRawMessageSetExtension(int fieldNumber, ByteString value)
+        public void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value)
         {
         {
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup);
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup);
             WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber);
             WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber);
@@ -316,18 +316,6 @@ namespace Google.ProtocolBuffers
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);
         }
         }
 
 
-        public void WriteMessageArray(int fieldNumber, string fieldName, System.Collections.IEnumerable list)
-        {
-            foreach (IMessageLite msg in list)
-                WriteMessage(fieldNumber, fieldName, msg);
-        }
-
-        public void WriteGroupArray(int fieldNumber, string fieldName, System.Collections.IEnumerable list)
-        {
-            foreach (IMessageLite msg in list)
-                WriteGroup(fieldNumber, fieldName, msg);
-        }
-
         public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
         public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list)
         {
         {
             foreach (object element in list)
             foreach (object element in list)

+ 4 - 4
src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs

@@ -280,7 +280,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasNamespace) {
       if (HasNamespace) {
         output.WriteString(1, "namespace", Namespace);
         output.WriteString(1, "namespace", Namespace);
@@ -886,7 +886,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasPropertyName) {
       if (HasPropertyName) {
         output.WriteString(1, "property_name", PropertyName);
         output.WriteString(1, "property_name", PropertyName);
@@ -1108,7 +1108,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasInterfaceId) {
       if (HasInterfaceId) {
         output.WriteString(1, "interface_id", InterfaceId);
         output.WriteString(1, "interface_id", InterfaceId);
@@ -1330,7 +1330,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasDispatchId) {
       if (HasDispatchId) {
         output.WriteInt32(1, "dispatch_id", DispatchId);
         output.WriteInt32(1, "dispatch_id", DispatchId);

+ 38 - 38
src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs

@@ -273,10 +273,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (file_.Count > 0) {
       if (file_.Count > 0) {
-        output.WriteMessageArray(1, "file", file_);
+        output.WriteArray(pbd::FieldType.Message, 1, "file", file_);
       }
       }
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -612,7 +612,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
@@ -624,16 +624,16 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
         output.WriteArray(pbd::FieldType.String, 3, "dependency", dependency_);
         output.WriteArray(pbd::FieldType.String, 3, "dependency", dependency_);
       }
       }
       if (messageType_.Count > 0) {
       if (messageType_.Count > 0) {
-        output.WriteMessageArray(4, "message_type", messageType_);
+        output.WriteArray(pbd::FieldType.Message, 4, "message_type", messageType_);
       }
       }
       if (enumType_.Count > 0) {
       if (enumType_.Count > 0) {
-        output.WriteMessageArray(5, "enum_type", enumType_);
+        output.WriteArray(pbd::FieldType.Message, 5, "enum_type", enumType_);
       }
       }
       if (service_.Count > 0) {
       if (service_.Count > 0) {
-        output.WriteMessageArray(6, "service", service_);
+        output.WriteArray(pbd::FieldType.Message, 6, "service", service_);
       }
       }
       if (extension_.Count > 0) {
       if (extension_.Count > 0) {
-        output.WriteMessageArray(7, "extension", extension_);
+        output.WriteArray(pbd::FieldType.Message, 7, "extension", extension_);
       }
       }
       if (HasOptions) {
       if (HasOptions) {
         output.WriteMessage(8, "options", Options);
         output.WriteMessage(8, "options", Options);
@@ -1223,7 +1223,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasStart) {
           if (HasStart) {
             output.WriteInt32(1, "start", Start);
             output.WriteInt32(1, "start", Start);
@@ -1538,25 +1538,25 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
       }
       }
       if (field_.Count > 0) {
       if (field_.Count > 0) {
-        output.WriteMessageArray(2, "field", field_);
+        output.WriteArray(pbd::FieldType.Message, 2, "field", field_);
       }
       }
       if (nestedType_.Count > 0) {
       if (nestedType_.Count > 0) {
-        output.WriteMessageArray(3, "nested_type", nestedType_);
+        output.WriteArray(pbd::FieldType.Message, 3, "nested_type", nestedType_);
       }
       }
       if (enumType_.Count > 0) {
       if (enumType_.Count > 0) {
-        output.WriteMessageArray(4, "enum_type", enumType_);
+        output.WriteArray(pbd::FieldType.Message, 4, "enum_type", enumType_);
       }
       }
       if (extensionRange_.Count > 0) {
       if (extensionRange_.Count > 0) {
-        output.WriteMessageArray(5, "extension_range", extensionRange_);
+        output.WriteArray(pbd::FieldType.Message, 5, "extension_range", extensionRange_);
       }
       }
       if (extension_.Count > 0) {
       if (extension_.Count > 0) {
-        output.WriteMessageArray(6, "extension", extension_);
+        output.WriteArray(pbd::FieldType.Message, 6, "extension", extension_);
       }
       }
       if (HasOptions) {
       if (HasOptions) {
         output.WriteMessage(7, "options", Options);
         output.WriteMessage(7, "options", Options);
@@ -2196,7 +2196,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
@@ -2705,13 +2705,13 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
       }
       }
       if (value_.Count > 0) {
       if (value_.Count > 0) {
-        output.WriteMessageArray(2, "value", value_);
+        output.WriteArray(pbd::FieldType.Message, 2, "value", value_);
       }
       }
       if (HasOptions) {
       if (HasOptions) {
         output.WriteMessage(3, "options", Options);
         output.WriteMessage(3, "options", Options);
@@ -3058,7 +3058,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
@@ -3393,13 +3393,13 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
       }
       }
       if (method_.Count > 0) {
       if (method_.Count > 0) {
-        output.WriteMessageArray(2, "method", method_);
+        output.WriteArray(pbd::FieldType.Message, 2, "method", method_);
       }
       }
       if (HasOptions) {
       if (HasOptions) {
         output.WriteMessage(3, "options", Options);
         output.WriteMessage(3, "options", Options);
@@ -3756,7 +3756,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasName) {
       if (HasName) {
         output.WriteString(1, "name", Name);
         output.WriteString(1, "name", Name);
@@ -4188,7 +4188,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<FileOptions, FileOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<FileOptions, FileOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasJavaPackage) {
       if (HasJavaPackage) {
@@ -4213,7 +4213,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
         output.WriteBool(18, "py_generic_services", PyGenericServices);
         output.WriteBool(18, "py_generic_services", PyGenericServices);
       }
       }
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -4689,7 +4689,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<MessageOptions, MessageOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<MessageOptions, MessageOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasMessageSetWireFormat) {
       if (HasMessageSetWireFormat) {
@@ -4699,7 +4699,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
         output.WriteBool(2, "no_standard_descriptor_accessor", NoStandardDescriptorAccessor);
         output.WriteBool(2, "no_standard_descriptor_accessor", NoStandardDescriptorAccessor);
       }
       }
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -5061,7 +5061,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<FieldOptions, FieldOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<FieldOptions, FieldOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasCtype) {
       if (HasCtype) {
@@ -5077,7 +5077,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
         output.WriteString(9, "experimental_map_key", ExperimentalMapKey);
         output.WriteString(9, "experimental_map_key", ExperimentalMapKey);
       }
       }
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -5448,11 +5448,11 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -5702,11 +5702,11 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -5956,11 +5956,11 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -6210,11 +6210,11 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (uninterpretedOption_.Count > 0) {
       if (uninterpretedOption_.Count > 0) {
-        output.WriteMessageArray(999, "uninterpreted_option", uninterpretedOption_);
+        output.WriteArray(pbd::FieldType.Message, 999, "uninterpreted_option", uninterpretedOption_);
       }
       }
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
@@ -6500,7 +6500,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasNamePart_) {
           if (HasNamePart_) {
             output.WriteString(1, "name_part", NamePart_);
             output.WriteString(1, "name_part", NamePart_);
@@ -6787,10 +6787,10 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (name_.Count > 0) {
       if (name_.Count > 0) {
-        output.WriteMessageArray(2, "name", name_);
+        output.WriteArray(pbd::FieldType.Message, 2, "name", name_);
       }
       }
       if (HasIdentifierValue) {
       if (HasIdentifierValue) {
         output.WriteString(3, "identifier_value", IdentifierValue);
         output.WriteString(3, "identifier_value", IdentifierValue);

+ 1 - 1
src/ProtocolBuffers/DynamicMessage.cs

@@ -246,7 +246,7 @@ namespace Google.ProtocolBuffers
             get { return fields.IsInitializedWithRespectTo(type.Fields); }
             get { return fields.IsInitializedWithRespectTo(type.Fields); }
         }
         }
 
 
-        public override void WriteTo(CodedOutputStream output)
+        public override void WriteTo(ICodedOutputStream output)
         {
         {
             fields.WriteTo(output);
             fields.WriteTo(output);
             if (type.Options.MessageSetWireFormat)
             if (type.Options.MessageSetWireFormat)

+ 1 - 1
src/ProtocolBuffers/ExtendableMessage.cs

@@ -230,7 +230,7 @@ namespace Google.ProtocolBuffers
                 }
                 }
             }
             }
 
 
-            public void WriteUntil(int end, CodedOutputStream output)
+            public void WriteUntil(int end, ICodedOutputStream output)
             {
             {
                 while (next != null && next.Value.Key.FieldNumber < end)
                 while (next != null && next.Value.Key.FieldNumber < end)
                 {
                 {

+ 1 - 1
src/ProtocolBuffers/ExtendableMessageLite.cs

@@ -173,7 +173,7 @@ namespace Google.ProtocolBuffers
                 }
                 }
             }
             }
 
 
-            public void WriteUntil(int end, CodedOutputStream output)
+            public void WriteUntil(int end, ICodedOutputStream output)
             {
             {
                 while (next != null && next.Value.Key.FieldNumber < end)
                 while (next != null && next.Value.Key.FieldNumber < end)
                 {
                 {

+ 25 - 23
src/ProtocolBuffers/FieldSet.cs

@@ -455,7 +455,7 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// <summary>
         /// See <see cref="IMessageLite.WriteTo(CodedOutputStream)" />.
         /// See <see cref="IMessageLite.WriteTo(CodedOutputStream)" />.
         /// </summary>
         /// </summary>
-        public void WriteTo(CodedOutputStream output)
+        public void WriteTo(ICodedOutputStream output)
         {
         {
             foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)
             foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)
             {
             {
@@ -466,7 +466,7 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// <summary>
         /// Writes a single field to a CodedOutputStream.
         /// Writes a single field to a CodedOutputStream.
         /// </summary>
         /// </summary>
-        public void WriteField(IFieldDescriptorLite field, Object value, CodedOutputStream output)
+        public void WriteField(IFieldDescriptorLite field, Object value, ICodedOutputStream output)
         {
         {
             if (field.IsExtension && field.MessageSetWireFormat)
             if (field.IsExtension && field.MessageSetWireFormat)
             {
             {
@@ -478,28 +478,30 @@ namespace Google.ProtocolBuffers
                 {
                 {
                     IEnumerable valueList = (IEnumerable) value;
                     IEnumerable valueList = (IEnumerable) value;
                     if (field.IsPacked)
                     if (field.IsPacked)
-                    {
-                        output.WriteTag(field.FieldNumber, WireFormat.WireType.LengthDelimited);
-                        // Compute the total data size so the length can be written.
-                        int dataSize = 0;
-                        foreach (object element in valueList)
-                        {
-                            dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);
-                        }
-                        output.WriteRawVarint32((uint) dataSize);
-                        // Write the data itself, without any tags.
-                        foreach (object element in valueList)
-                        {
-                            output.WriteFieldNoTag(field.FieldType, element);
-                        }
-                    }
+                        output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList);
+                    //{
+                    //    output.WriteTag(field.FieldNumber, WireFormat.WireType.LengthDelimited);
+                    //    // Compute the total data size so the length can be written.
+                    //    int dataSize = 0;
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);
+                    //    }
+                    //    output.WriteRawVarint32((uint) dataSize);
+                    //    // Write the data itself, without any tags.
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        output.WriteFieldNoTag(field.FieldType, element);
+                    //    }
+                    //}
                     else
                     else
-                    {
-                        foreach (object element in valueList)
-                        {
-                            output.WriteField(field.FieldType, field.FieldNumber, field.Name, element);
-                        }
-                    }
+                        output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList);
+                    //{
+                    //    foreach (object element in valueList)
+                    //    {
+                    //        output.WriteField(field.FieldType, field.FieldNumber, field.Name, element);
+                    //    }
+                    //}
                 }
                 }
                 else
                 else
                 {
                 {

+ 4 - 2
src/ProtocolBuffers/ICodedOutputStream.cs

@@ -1,6 +1,9 @@
 using System;
 using System;
 using Google.ProtocolBuffers.Descriptors;
 using Google.ProtocolBuffers.Descriptors;
 
 
+//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members
+#pragma warning disable 3010
+
 namespace Google.ProtocolBuffers
 namespace Google.ProtocolBuffers
 {
 {
     public interface ICodedOutputStream
     public interface ICodedOutputStream
@@ -73,8 +76,7 @@ namespace Google.ProtocolBuffers
         void WriteSInt32(int fieldNumber, string fieldName, int value);
         void WriteSInt32(int fieldNumber, string fieldName, int value);
         void WriteSInt64(int fieldNumber, string fieldName, long value);
         void WriteSInt64(int fieldNumber, string fieldName, long value);
         void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value);
         void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value);
-        void WriteMessageArray(int fieldNumber, string fieldName, System.Collections.IEnumerable list);
-        void WriteGroupArray(int fieldNumber, string fieldName, System.Collections.IEnumerable list);
+        void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value);
         void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
         void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
         void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
         void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, System.Collections.IEnumerable list);
         void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, int calculatedSize, System.Collections.IEnumerable list);
         void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, int calculatedSize, System.Collections.IEnumerable list);

+ 4 - 4
src/ProtocolBuffers/IMessage.cs

@@ -128,7 +128,7 @@ namespace Google.ProtocolBuffers
         /// of the message before the data, then making sure you limit the input to
         /// of the message before the data, then making sure you limit the input to
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// </remarks>
         /// </remarks>
-        new void WriteTo(CodedOutputStream output);
+        new void WriteTo(ICodedOutputStream output);
 
 
         /// <summary>
         /// <summary>
         /// Like WriteTo(Stream) but writes the size of the message as a varint before
         /// Like WriteTo(Stream) but writes the size of the message as a varint before
@@ -174,19 +174,19 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a ByteString. This is a trivial wrapper
         /// Serializes the message to a ByteString. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         new ByteString ToByteString();
         new ByteString ToByteString();
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a byte array. This is a trivial wrapper
         /// Serializes the message to a byte array. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         new byte[] ToByteArray();
         new byte[] ToByteArray();
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message and writes it to the given stream.
         /// Serializes the message and writes it to the given stream.
-        /// This is just a wrapper around WriteTo(CodedOutputStream). This
+        /// This is just a wrapper around WriteTo(ICodedOutputStream). This
         /// does not flush or close the stream.
         /// does not flush or close the stream.
         /// </summary>
         /// </summary>
         /// <param name="output"></param>
         /// <param name="output"></param>

+ 4 - 4
src/ProtocolBuffers/IMessageLite.cs

@@ -64,7 +64,7 @@ namespace Google.ProtocolBuffers
         /// of the message before the data, then making sure you limit the input to
         /// of the message before the data, then making sure you limit the input to
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
         /// </remarks>
         /// </remarks>
-        void WriteTo(CodedOutputStream output);
+        void WriteTo(ICodedOutputStream output);
 
 
         /// <summary>
         /// <summary>
         /// Like WriteTo(Stream) but writes the size of the message as a varint before
         /// Like WriteTo(Stream) but writes the size of the message as a varint before
@@ -115,19 +115,19 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a ByteString. This is a trivial wrapper
         /// Serializes the message to a ByteString. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         ByteString ToByteString();
         ByteString ToByteString();
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a byte array. This is a trivial wrapper
         /// Serializes the message to a byte array. This is a trivial wrapper
-        /// around WriteTo(CodedOutputStream).
+        /// around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         byte[] ToByteArray();
         byte[] ToByteArray();
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message and writes it to the given stream.
         /// Serializes the message and writes it to the given stream.
-        /// This is just a wrapper around WriteTo(CodedOutputStream). This
+        /// This is just a wrapper around WriteTo(ICodedOutputStream). This
         /// does not flush or close the stream.
         /// does not flush or close the stream.
         /// </summary>
         /// </summary>
         /// <param name="output"></param>
         /// <param name="output"></param>

+ 115 - 113
src/ProtocolBuffers/ProtocolBuffersLite.csproj

@@ -1,120 +1,122 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Google.ProtocolBuffers</RootNamespace>
-    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>
-    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <SignAssembly>true</SignAssembly>
-    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>3.5</OldToolsVersion>
-    <UpgradeBackupLocation />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
-    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
-    <DefineConstants>TRACE;DEBUG;LITE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoStdLib>true</NoStdLib>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
-    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
-    <DefineConstants>TRACE;LITE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoStdLib>true</NoStdLib>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug_Silverlight2\</OutputPath>
-    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
-    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
-    <DefineConstants>DEBUG;TRACE;SILVERLIGHT2;LITE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoStdLib>true</NoStdLib>
-    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'">
-	  <DebugType>pdbonly</DebugType>
-	  <Optimize>true</Optimize>
-	  <OutputPath>bin\Release_Silverlight2\</OutputPath>
-    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
-    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
-	  <DefineConstants>TRACE;SILVERLIGHT2;LITE</DefineConstants>
-	  <ErrorReport>prompt</ErrorReport>
-	  <WarningLevel>4</WarningLevel>
-	  <NoStdLib>true</NoStdLib>
-	  <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="mscorlib" />
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AbstractBuilderLite.cs" />
-    <Compile Include="AbstractMessageLite.cs" />
-    <Compile Include="Collections\Dictionaries.cs" />
-    <Compile Include="Collections\Enumerables.cs" />
-    <Compile Include="Collections\IPopsicleList.cs" />
-    <Compile Include="Collections\Lists.cs" />
-    <Compile Include="Collections\PopsicleList.cs" />
-    <Compile Include="Collections\ReadOnlyDictionary.cs" />
-    <Compile Include="Descriptors\FieldMappingAttribute.cs" />
-    <Compile Include="Descriptors\FieldType.cs" />
-    <Compile Include="Descriptors\MappedType.cs" />
-    <Compile Include="EnumLite.cs" />
-    <Compile Include="ExtendableBuilderLite.cs" />
-    <Compile Include="ExtendableMessageLite.cs" />
-    <Compile Include="FieldSet.cs" />
-    <Compile Include="GeneratedBuilderLite.cs" />
-    <Compile Include="GeneratedExtensionLite.cs" />
-    <Compile Include="GeneratedMessageLite.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ByteString.cs" />
-    <Compile Include="CodedInputStream.cs" />
-    <Compile Include="CodedOutputStream.cs" />
-    <Compile Include="ExtensionRegistryLite.cs" />
-    <Compile Include="IBuilderLite.cs" />
-    <Compile Include="IMessageLite.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="InvalidProtocolBufferException.cs" />
-    <Compile Include="ThrowHelper.cs" />
-    <Compile Include="UninitializedMessageException.cs" />
-    <Compile Include="WireFormat.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' != 'Silverlight2' " />
-  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Silverlight2' " />
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>
+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
+    <DefineConstants>TRACE;DEBUG;LITE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoStdLib>true</NoStdLib>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
+    <DefineConstants>TRACE;LITE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoStdLib>true</NoStdLib>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug_Silverlight2|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug_Silverlight2\</OutputPath>
+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
+    <DefineConstants>DEBUG;TRACE;SILVERLIGHT2;LITE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoStdLib>true</NoStdLib>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release_Silverlight2|AnyCPU'">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release_Silverlight2\</OutputPath>
+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>
+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>
+    <DefineConstants>TRACE;SILVERLIGHT2;LITE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoStdLib>true</NoStdLib>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="mscorlib" />
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AbstractBuilderLite.cs" />
+    <Compile Include="AbstractMessageLite.cs" />
+    <Compile Include="CodedOutputStream.ComputeSize.cs" />
+    <Compile Include="Collections\Dictionaries.cs" />
+    <Compile Include="Collections\Enumerables.cs" />
+    <Compile Include="Collections\IPopsicleList.cs" />
+    <Compile Include="Collections\Lists.cs" />
+    <Compile Include="Collections\PopsicleList.cs" />
+    <Compile Include="Collections\ReadOnlyDictionary.cs" />
+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />
+    <Compile Include="Descriptors\FieldType.cs" />
+    <Compile Include="Descriptors\MappedType.cs" />
+    <Compile Include="EnumLite.cs" />
+    <Compile Include="ExtendableBuilderLite.cs" />
+    <Compile Include="ExtendableMessageLite.cs" />
+    <Compile Include="FieldSet.cs" />
+    <Compile Include="GeneratedBuilderLite.cs" />
+    <Compile Include="GeneratedExtensionLite.cs" />
+    <Compile Include="GeneratedMessageLite.cs" />
+    <Compile Include="ICodedOutputStream.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ByteString.cs" />
+    <Compile Include="CodedInputStream.cs" />
+    <Compile Include="CodedOutputStream.cs" />
+    <Compile Include="ExtensionRegistryLite.cs" />
+    <Compile Include="IBuilderLite.cs" />
+    <Compile Include="IMessageLite.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="InvalidProtocolBufferException.cs" />
+    <Compile Include="ThrowHelper.cs" />
+    <Compile Include="UninitializedMessageException.cs" />
+    <Compile Include="WireFormat.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" Condition=" '$(Configuration)' != 'Silverlight2' " />
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" Condition=" '$(Configuration)' == 'Silverlight2' " />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   <Target Name="BeforeBuild">
   </Target>
   </Target>
   <Target Name="AfterBuild">
   <Target Name="AfterBuild">
   </Target>
   </Target>
-  -->
+  -->
 </Project>
 </Project>

+ 3 - 3
src/ProtocolBuffers/UnknownField.cs

@@ -174,7 +174,7 @@ namespace Google.ProtocolBuffers
         /// Serializes the field, including the field number, and writes it to
         /// Serializes the field, including the field number, and writes it to
         /// <paramref name="output"/>.
         /// <paramref name="output"/>.
         /// </summary>
         /// </summary>
-        public void WriteTo(int fieldNumber, CodedOutputStream output)
+        public void WriteTo(int fieldNumber, ICodedOutputStream output)
         {
         {
             foreach (ulong value in varintList)
             foreach (ulong value in varintList)
             {
             {
@@ -238,11 +238,11 @@ namespace Google.ProtocolBuffers
         /// </summary>
         /// </summary>
         /// <param name="fieldNumber"></param>
         /// <param name="fieldNumber"></param>
         /// <param name="output"></param>
         /// <param name="output"></param>
-        public void WriteAsMessageSetExtensionTo(int fieldNumber, CodedOutputStream output)
+        public void WriteAsMessageSetExtensionTo(int fieldNumber, ICodedOutputStream output)
         {
         {
             foreach (ByteString value in lengthDelimitedList)
             foreach (ByteString value in lengthDelimitedList)
             {
             {
-                output.WriteRawMessageSetExtension(fieldNumber, value);
+                output.WriteMessageSetExtension(fieldNumber, UnknownFieldName, value);
             }
             }
         }
         }
 
 

+ 5 - 5
src/ProtocolBuffers/UnknownFieldSet.cs

@@ -124,7 +124,7 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// <summary>
         /// Serializes the set and writes it to <paramref name="output"/>.
         /// Serializes the set and writes it to <paramref name="output"/>.
         /// </summary>
         /// </summary>
-        public void WriteTo(CodedOutputStream output)
+        public void WriteTo(ICodedOutputStream output)
         {
         {
             foreach (KeyValuePair<int, UnknownField> entry in fields)
             foreach (KeyValuePair<int, UnknownField> entry in fields)
             {
             {
@@ -168,7 +168,7 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a ByteString and returns it. This is
         /// Serializes the message to a ByteString and returns it. This is
-        /// just a trivial wrapper around WriteTo(CodedOutputStream).
+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         /// <returns></returns>
         /// <returns></returns>
         public ByteString ToByteString()
         public ByteString ToByteString()
@@ -180,7 +180,7 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message to a byte array and returns it. This is
         /// Serializes the message to a byte array and returns it. This is
-        /// just a trivial wrapper around WriteTo(CodedOutputStream).
+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         /// <returns></returns>
         /// <returns></returns>
         public byte[] ToByteArray()
         public byte[] ToByteArray()
@@ -194,7 +194,7 @@ namespace Google.ProtocolBuffers
 
 
         /// <summary>
         /// <summary>
         /// Serializes the message and writes it to <paramref name="output"/>. This is
         /// Serializes the message and writes it to <paramref name="output"/>. This is
-        /// just a trivial wrapper around WriteTo(CodedOutputStream).
+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).
         /// </summary>
         /// </summary>
         /// <param name="output"></param>
         /// <param name="output"></param>
         public void WriteTo(Stream output)
         public void WriteTo(Stream output)
@@ -208,7 +208,7 @@ namespace Google.ProtocolBuffers
         /// Serializes the set and writes it to <paramref name="output"/> using
         /// Serializes the set and writes it to <paramref name="output"/> using
         /// the MessageSet wire format.
         /// the MessageSet wire format.
         /// </summary>
         /// </summary>
-        public void WriteAsMessageSetTo(CodedOutputStream output)
+        public void WriteAsMessageSetTo(ICodedOutputStream output)
         {
         {
             foreach (KeyValuePair<int, UnknownField> entry in fields)
             foreach (KeyValuePair<int, UnknownField> entry in fields)
             {
             {

+ 7 - 7
src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs

@@ -98,7 +98,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasD) {
       if (HasD) {
         output.WriteInt32(1, "d", D);
         output.WriteInt32(1, "d", D);
@@ -392,7 +392,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasNumber) {
           if (HasNumber) {
             output.WriteString(1, "number", Number);
             output.WriteString(1, "number", Number);
@@ -691,7 +691,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasAddress) {
           if (HasAddress) {
             output.WriteString(1, "address", Address);
             output.WriteString(1, "address", Address);
@@ -1097,7 +1097,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasName) {
       if (HasName) {
@@ -1110,10 +1110,10 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteString(3, "email", Email);
         output.WriteString(3, "email", Email);
       }
       }
       if (phone_.Count > 0) {
       if (phone_.Count > 0) {
-        output.WriteMessageArray(4, "phone", phone_);
+        output.WriteArray(pbd::FieldType.Message, 4, "phone", phone_);
       }
       }
       if (addresses_.Count > 0) {
       if (addresses_.Count > 0) {
-        output.WriteGroupArray(5, "addresses", addresses_);
+        output.WriteArray(pbd::FieldType.Group, 5, "addresses", addresses_);
       }
       }
       if (codes_.Count > 0) {
       if (codes_.Count > 0) {
         output.WritePackedArray(pbd::FieldType.Int32, 10, "codes", codesMemoizedSerializedSize, codes_);
         output.WritePackedArray(pbd::FieldType.Int32, 10, "codes", codesMemoizedSerializedSize, codes_);
@@ -1569,7 +1569,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasNumber) {
       if (HasNumber) {
         output.WriteString(1, "number", Number);
         output.WriteString(1, "number", Number);

+ 1 - 1
src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportLiteProtoFile.cs

@@ -70,7 +70,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasD) {
       if (HasD) {
         output.WriteInt32(1, "d", D);
         output.WriteInt32(1, "d", D);

+ 1 - 1
src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportProtoFile.cs

@@ -106,7 +106,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasD) {
       if (HasD) {
         output.WriteInt32(1, "d", D);
         output.WriteInt32(1, "d", D);

+ 1 - 1
src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs

@@ -59,7 +59,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasMessage) {
       if (HasMessage) {
         output.WriteMessage(1, "message", Message);
         output.WriteMessage(1, "message", Message);

+ 16 - 16
src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs

@@ -1113,7 +1113,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasBb) {
           if (HasBb) {
             output.WriteInt32(1, "bb", Bb);
             output.WriteInt32(1, "bb", Bb);
@@ -1328,7 +1328,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(17, "a", A);
             output.WriteInt32(17, "a", A);
@@ -1543,7 +1543,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(47, "a", A);
             output.WriteInt32(47, "a", A);
@@ -2478,7 +2478,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalInt32) {
       if (HasOptionalInt32) {
         output.WriteInt32(1, "optional_int32", OptionalInt32);
         output.WriteInt32(1, "optional_int32", OptionalInt32);
@@ -2598,16 +2598,16 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
       }
       }
       if (repeatedGroup_.Count > 0) {
       if (repeatedGroup_.Count > 0) {
-        output.WriteGroupArray(46, "repeatedgroup", repeatedGroup_);
+        output.WriteArray(pbd::FieldType.Group, 46, "repeatedgroup", repeatedGroup_);
       }
       }
       if (repeatedNestedMessage_.Count > 0) {
       if (repeatedNestedMessage_.Count > 0) {
-        output.WriteMessageArray(48, "repeated_nested_message", repeatedNestedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 48, "repeated_nested_message", repeatedNestedMessage_);
       }
       }
       if (repeatedForeignMessage_.Count > 0) {
       if (repeatedForeignMessage_.Count > 0) {
-        output.WriteMessageArray(49, "repeated_foreign_message", repeatedForeignMessage_);
+        output.WriteArray(pbd::FieldType.Message, 49, "repeated_foreign_message", repeatedForeignMessage_);
       }
       }
       if (repeatedImportMessage_.Count > 0) {
       if (repeatedImportMessage_.Count > 0) {
-        output.WriteMessageArray(50, "repeated_import_message", repeatedImportMessage_);
+        output.WriteArray(pbd::FieldType.Message, 50, "repeated_import_message", repeatedImportMessage_);
       }
       }
       if (repeatedNestedEnum_.Count > 0) {
       if (repeatedNestedEnum_.Count > 0) {
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
@@ -5587,7 +5587,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasC) {
       if (HasC) {
         output.WriteInt32(1, "c", C);
         output.WriteInt32(1, "c", C);
@@ -5982,7 +5982,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (packedInt32_.Count > 0) {
       if (packedInt32_.Count > 0) {
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
@@ -6991,7 +6991,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -7179,7 +7179,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(17, "a", A);
         output.WriteInt32(17, "a", A);
@@ -7394,7 +7394,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(47, "a", A);
         output.WriteInt32(47, "a", A);
@@ -7600,7 +7600,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -7780,7 +7780,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
     }
     }
     
     
@@ -7961,7 +7961,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasDeprecatedField) {
       if (HasDeprecatedField) {
         output.WriteInt32(1, "deprecated_field", DeprecatedField);
         output.WriteInt32(1, "deprecated_field", DeprecatedField);

+ 47 - 47
src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs

@@ -1103,7 +1103,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasBb) {
           if (HasBb) {
             output.WriteInt32(1, "bb", Bb);
             output.WriteInt32(1, "bb", Bb);
@@ -1324,7 +1324,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(17, "a", A);
             output.WriteInt32(17, "a", A);
@@ -1545,7 +1545,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(47, "a", A);
             output.WriteInt32(47, "a", A);
@@ -2478,7 +2478,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalInt32) {
       if (HasOptionalInt32) {
         output.WriteInt32(1, "optional_int32", OptionalInt32);
         output.WriteInt32(1, "optional_int32", OptionalInt32);
@@ -2598,16 +2598,16 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
         output.WriteArray(pbd::FieldType.Bytes, 45, "repeated_bytes", repeatedBytes_);
       }
       }
       if (repeatedGroup_.Count > 0) {
       if (repeatedGroup_.Count > 0) {
-        output.WriteGroupArray(46, "repeatedgroup", repeatedGroup_);
+        output.WriteArray(pbd::FieldType.Group, 46, "repeatedgroup", repeatedGroup_);
       }
       }
       if (repeatedNestedMessage_.Count > 0) {
       if (repeatedNestedMessage_.Count > 0) {
-        output.WriteMessageArray(48, "repeated_nested_message", repeatedNestedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 48, "repeated_nested_message", repeatedNestedMessage_);
       }
       }
       if (repeatedForeignMessage_.Count > 0) {
       if (repeatedForeignMessage_.Count > 0) {
-        output.WriteMessageArray(49, "repeated_foreign_message", repeatedForeignMessage_);
+        output.WriteArray(pbd::FieldType.Message, 49, "repeated_foreign_message", repeatedForeignMessage_);
       }
       }
       if (repeatedImportMessage_.Count > 0) {
       if (repeatedImportMessage_.Count > 0) {
-        output.WriteMessageArray(50, "repeated_import_message", repeatedImportMessage_);
+        output.WriteArray(pbd::FieldType.Message, 50, "repeated_import_message", repeatedImportMessage_);
       }
       }
       if (repeatedNestedEnum_.Count > 0) {
       if (repeatedNestedEnum_.Count > 0) {
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
         output.WriteArray(pbd::FieldType.Enum, 51, "repeated_nested_enum", repeatedNestedEnum_);
@@ -5356,7 +5356,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasDeprecatedInt32) {
       if (HasDeprecatedInt32) {
         output.WriteInt32(1, "deprecated_int32", DeprecatedInt32);
         output.WriteInt32(1, "deprecated_int32", DeprecatedInt32);
@@ -5577,7 +5577,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasC) {
       if (HasC) {
         output.WriteInt32(1, "c", C);
         output.WriteInt32(1, "c", C);
@@ -5789,7 +5789,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -5983,7 +5983,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(17, "a", A);
         output.WriteInt32(17, "a", A);
@@ -6204,7 +6204,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(47, "a", A);
         output.WriteInt32(47, "a", A);
@@ -6417,7 +6417,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -6934,7 +6934,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -8175,13 +8175,13 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalMessage) {
       if (HasOptionalMessage) {
         output.WriteMessage(1, "optional_message", OptionalMessage);
         output.WriteMessage(1, "optional_message", OptionalMessage);
       }
       }
       if (repeatedMessage_.Count > 0) {
       if (repeatedMessage_.Count > 0) {
-        output.WriteMessageArray(2, "repeated_message", repeatedMessage_);
+        output.WriteArray(pbd::FieldType.Message, 2, "repeated_message", repeatedMessage_);
       }
       }
       if (HasDummy) {
       if (HasDummy) {
         output.WriteInt32(3, "dummy", Dummy);
         output.WriteInt32(3, "dummy", Dummy);
@@ -8504,7 +8504,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasForeignNested) {
       if (HasForeignNested) {
         output.WriteMessage(1, "foreign_nested", ForeignNested);
         output.WriteMessage(1, "foreign_nested", ForeignNested);
@@ -8738,7 +8738,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -8919,7 +8919,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -9104,7 +9104,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(43, output);
       extensionWriter.WriteUntil(43, output);
@@ -9310,7 +9310,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -9572,7 +9572,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteMessage(1, "a", A);
         output.WriteMessage(1, "a", A);
@@ -9847,7 +9847,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasBb) {
       if (HasBb) {
         output.WriteMessage(1, "bb", Bb);
         output.WriteMessage(1, "bb", Bb);
@@ -10101,7 +10101,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteMessage(1, "a", A);
         output.WriteMessage(1, "a", A);
@@ -10406,7 +10406,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(1, "a", A);
             output.WriteInt32(1, "a", A);
@@ -10627,7 +10627,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasA) {
           if (HasA) {
             output.WriteInt32(1, "a", A);
             output.WriteInt32(1, "a", A);
@@ -10846,7 +10846,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasA) {
       if (HasA) {
         output.WriteInt32(1, "a", A);
         output.WriteInt32(1, "a", A);
@@ -11219,13 +11219,13 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (nestedmessageRepeatedInt32_.Count > 0) {
           if (nestedmessageRepeatedInt32_.Count > 0) {
             output.WriteArray(pbd::FieldType.Int32, 1, "nestedmessage_repeated_int32", nestedmessageRepeatedInt32_);
             output.WriteArray(pbd::FieldType.Int32, 1, "nestedmessage_repeated_int32", nestedmessageRepeatedInt32_);
           }
           }
           if (nestedmessageRepeatedForeignmessage_.Count > 0) {
           if (nestedmessageRepeatedForeignmessage_.Count > 0) {
-            output.WriteMessageArray(2, "nestedmessage_repeated_foreignmessage", nestedmessageRepeatedForeignmessage_);
+            output.WriteArray(pbd::FieldType.Message, 2, "nestedmessage_repeated_foreignmessage", nestedmessageRepeatedForeignmessage_);
           }
           }
           UnknownFields.WriteTo(output);
           UnknownFields.WriteTo(output);
         }
         }
@@ -11486,7 +11486,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasOptionalNestedMessage) {
       if (HasOptionalNestedMessage) {
         output.WriteMessage(1, "optional_nested_message", OptionalNestedMessage);
         output.WriteMessage(1, "optional_nested_message", OptionalNestedMessage);
@@ -11852,7 +11852,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasPrimitiveField) {
       if (HasPrimitiveField) {
         output.WriteInt32(1, "PrimitiveField", PrimitiveField);
         output.WriteInt32(1, "PrimitiveField", PrimitiveField);
@@ -11882,7 +11882,7 @@ namespace Google.ProtocolBuffers.TestProtos {
         output.WriteArray(pbd::FieldType.Enum, 9, "RepeatedEnumField", repeatedEnumField_);
         output.WriteArray(pbd::FieldType.Enum, 9, "RepeatedEnumField", repeatedEnumField_);
       }
       }
       if (repeatedMessageField_.Count > 0) {
       if (repeatedMessageField_.Count > 0) {
-        output.WriteMessageArray(10, "RepeatedMessageField", repeatedMessageField_);
+        output.WriteArray(pbd::FieldType.Message, 10, "RepeatedMessageField", repeatedMessageField_);
       }
       }
       if (repeatedStringPieceField_.Count > 0) {
       if (repeatedStringPieceField_.Count > 0) {
         output.WriteArray(pbd::FieldType.String, 11, "RepeatedStringPieceField", repeatedStringPieceField_);
         output.WriteArray(pbd::FieldType.String, 11, "RepeatedStringPieceField", repeatedStringPieceField_);
@@ -12578,7 +12578,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       if (HasMyInt) {
       if (HasMyInt) {
@@ -13049,7 +13049,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasEscapedBytes) {
       if (HasEscapedBytes) {
         output.WriteBytes(1, "escaped_bytes", EscapedBytes);
         output.WriteBytes(1, "escaped_bytes", EscapedBytes);
@@ -13834,7 +13834,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasData) {
       if (HasData) {
         output.WriteString(1, "data", Data);
         output.WriteString(1, "data", Data);
@@ -14056,7 +14056,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasData) {
       if (HasData) {
         output.WriteBytes(1, "data", Data);
         output.WriteBytes(1, "data", Data);
@@ -14458,7 +14458,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (packedInt32_.Count > 0) {
       if (packedInt32_.Count > 0) {
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
         output.WritePackedArray(pbd::FieldType.Int32, 90, "packed_int32", packedInt32MemoizedSerializedSize, packedInt32_);
@@ -15571,7 +15571,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (unpackedInt32_.Count > 0) {
       if (unpackedInt32_.Count > 0) {
         output.WriteArray(pbd::FieldType.Int32, 90, "unpacked_int32", unpackedInt32_);
         output.WriteArray(pbd::FieldType.Int32, 90, "unpacked_int32", unpackedInt32_);
@@ -16398,7 +16398,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
       extensionWriter.WriteUntil(536870912, output);
       extensionWriter.WriteUntil(536870912, output);
@@ -16630,7 +16630,7 @@ namespace Google.ProtocolBuffers.TestProtos {
           }
           }
         }
         }
         
         
-        public override void WriteTo(pb::CodedOutputStream output) {
+        public override void WriteTo(pb::ICodedOutputStream output) {
           int size = SerializedSize;
           int size = SerializedSize;
           if (HasDynamicField) {
           if (HasDynamicField) {
             output.WriteInt32(2100, "dynamic_field", DynamicField);
             output.WriteInt32(2100, "dynamic_field", DynamicField);
@@ -16895,7 +16895,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (HasScalarExtension) {
       if (HasScalarExtension) {
         output.WriteFixed32(2000, "scalar_extension", ScalarExtension);
         output.WriteFixed32(2000, "scalar_extension", ScalarExtension);
@@ -17472,7 +17472,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       if (repeatedFixed32_.Count > 0) {
       if (repeatedFixed32_.Count > 0) {
         output.WriteArray(pbd::FieldType.Fixed32, 12, "repeated_fixed32", repeatedFixed32_);
         output.WriteArray(pbd::FieldType.Fixed32, 12, "repeated_fixed32", repeatedFixed32_);
@@ -17931,7 +17931,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18111,7 +18111,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18291,7 +18291,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }
@@ -18471,7 +18471,7 @@ namespace Google.ProtocolBuffers.TestProtos {
       }
       }
     }
     }
     
     
-    public override void WriteTo(pb::CodedOutputStream output) {
+    public override void WriteTo(pb::ICodedOutputStream output) {
       int size = SerializedSize;
       int size = SerializedSize;
       UnknownFields.WriteTo(output);
       UnknownFields.WriteTo(output);
     }
     }