Browse Source

Prohibit null values for string/bytes fields in generated code.

Jon Skeet 10 years ago
parent
commit
3980cf9df1

+ 10 - 0
csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs

@@ -111,6 +111,16 @@ namespace Google.Protobuf
             Assert.IsNull(message.OneofNestedMessage);
         }
 
+        [Test]
+        public void NullStringAndBytesRejected()
+        {
+            var message = new TestAllTypes();
+            Assert.Throws<ArgumentNullException>(() => message.SingleString = null);
+            Assert.Throws<ArgumentNullException>(() => message.OneofString = null);
+            Assert.Throws<ArgumentNullException>(() => message.SingleBytes = null);
+            Assert.Throws<ArgumentNullException>(() => message.OneofBytes = null);
+        }
+
         [Test]
         public void RoundTrip_Empty()
         {

+ 0 - 11
src/google/protobuf/compiler/csharp/csharp_field_base.cc

@@ -127,17 +127,6 @@ void FieldGeneratorBase::AddDeprecatedFlag(io::Printer* printer) {
   }
 }
 
-void FieldGeneratorBase::AddNullCheck(io::Printer* printer) {
-  AddNullCheck(printer, "value");
-}
-
-void FieldGeneratorBase::AddNullCheck(io::Printer* printer, const std::string& name) {
-  if (is_nullable_type()) {
-    printer->Print("  pb::ThrowHelper.ThrowIfNull($name$, \"$name$\");\n",
-                   "name", name);
-  }
-}
-
 void FieldGeneratorBase::AddPublicMemberAttributes(io::Printer* printer) {
   AddDeprecatedFlag(printer);
 }

+ 2 - 2
src/google/protobuf/compiler/csharp/csharp_primitive_field.cc

@@ -81,7 +81,7 @@ void PrimitiveFieldGenerator::GenerateMembers(io::Printer* printer) {
   } else {
     printer->Print(
       variables_,
-      "    $name$_ = value ?? $default_value$;\n");
+      "    $name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n");
   }
   printer->Print(
     "  }\n"
@@ -183,7 +183,7 @@ void PrimitiveOneofFieldGenerator::GenerateMembers(io::Printer* printer) {
     } else {
       printer->Print(
         variables_,
-        "    $oneof_name$_ = value ?? $default_value$;\n");
+        "    $oneof_name$_ = pb::Preconditions.CheckNotNull(value, \"value\");\n");
     }
     printer->Print(
       variables_,