浏览代码

Make extension reflection helper use GetOrRegisterExtension

Sydney Acksman 6 年之前
父节点
当前提交
bf4f6c5431

+ 14 - 0
csharp/src/Google.Protobuf.Test/Reflection/FieldAccessTest.cs

@@ -97,6 +97,20 @@ namespace Google.Protobuf.Reflection
             Assert.AreEqual(message.GetExtension(OptionalBoolExtension), Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(OptionalBoolExtension.FieldNumber).Accessor.GetValue(message));
         }
 
+        [Test]
+        public void GetRepeatedExtensionValue()
+        {
+            // check to make sure repeated accessor uses GetOrRegister
+            var message = new Proto2.TestAllExtensions();
+
+            Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
+            Assert.IsNotNull(Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(RepeatedBoolExtension.FieldNumber).Accessor.GetValue(message));
+            Assert.IsNotNull(message.GetExtension(RepeatedBoolExtension));
+
+            message.ClearExtension(RepeatedBoolExtension);
+            Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
+        }
+
         [Test]
         public void Clear()
         {

+ 1 - 1
csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs

@@ -230,7 +230,7 @@ namespace Google.Protobuf.Reflection
                 }
                 else if (extension is RepeatedExtension<T1, T3>)
                 {
-                    return extensionMessage.GetExtension(extension as RepeatedExtension<T1, T3>);
+                    return extensionMessage.GetOrRegisterExtension(extension as RepeatedExtension<T1, T3>);
                 }
                 else
                 {