Setters/adders now throw ArgumentNullException appropriately.
diff --git a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
index d97b0ed..5d0a929 100644
--- a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
+++ b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
@@ -103,7 +103,20 @@
       TestAllTypes message = builder.Build();
       TestUtil.AssertAllFieldsSet(message);
     }
-    
+
+    [Test]
+    public void SettersRejectNull() {
+      TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
+      TestUtil.AssertArgumentNullException(() => builder.SetOptionalString(null));
+      TestUtil.AssertArgumentNullException(() => builder.SetOptionalBytes(null));
+      TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage)null));
+      TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRepeatedString(null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRepeatedBytes(null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage)null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null));
+    }
+
     [Test]
     public void RepeatedSetters() {
       TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
@@ -131,6 +144,18 @@
     }
 
     [Test]
+    public void RepeatedAppendRejectsNull() {
+      TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
+
+      ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
+      TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(new[] { foreignMessage, null }));
+      TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignEnum(null));
+      TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedString(new[] { "one", null }));
+      TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedBytes(new[] { TestUtil.ToBytes("one"), null }));
+    }
+
+    [Test]
     public void SettingForeignMessageUsingBuilder() {
       TestAllTypes message = TestAllTypes.CreateBuilder()
           // Pass builder for foreign message instance.
@@ -182,6 +207,11 @@
     }
 
     [Test]
+    public void ReflectionSettersRejectNull() {
+      TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
+      reflectionTester.AssertReflectionSettersRejectNull(builder);
+    }
+    [Test]
     public void ReflectionRepeatedSetters() {
       TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
       reflectionTester.SetAllFieldsViaReflection(builder);
@@ -191,6 +221,12 @@
     }
 
     [Test]
+    public void TestReflectionRepeatedSettersRejectNull() {
+      TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
+      reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
+    }
+
+    [Test]
     public void ReflectionDefaults() {
       reflectionTester.AssertClearViaReflection(TestAllTypes.DefaultInstance);
       reflectionTester.AssertClearViaReflection(TestAllTypes.CreateBuilder().Build());
@@ -238,6 +274,12 @@
     }
 
     [Test]
+    public void ExtensionReflectionSettersRejectNull() {
+      TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
+      extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);
+    }
+
+    [Test]
     public void ExtensionReflectionRepeatedSetters() {
       TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
       extensionsReflectionTester.SetAllFieldsViaReflection(builder);
@@ -247,6 +289,12 @@
     }
 
     [Test]
+    public void ExtensionReflectionRepeatedSettersRejectNull() {
+      TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
+      extensionsReflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
+    }
+
+    [Test]
     public void ExtensionReflectionDefaults() {
       extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance);
       extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build());
@@ -265,6 +313,18 @@
           .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));
     }
 
+    /* Reinstate this test in the commit where it's fixed...
+    [Test]
+    public void ExtensionMergeFrom() {
+      TestAllExtensions original = TestAllExtensions.CreateBuilder()
+          .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1).Build();
+      TestAllExtensions merged =
+          TestAllExtensions.CreateBuilder().MergeFrom(original).Build();
+      Assert.IsTrue((merged.HasExtension(UnitTestProtoFile.OptionalInt32Extension)));
+      Assert.AreEqual(1, (int)merged.GetExtension(UnitTestProtoFile.OptionalInt32Extension));
+    }
+    */
+
     /* Removed multiple files option for the moment
     [Test]
     public void MultipleFilesOption() {