소스 검색

Make extension reflection helper use GetOrRegisterExtension

Sydney Acksman 6 년 전
부모
커밋
bf4f6c5431
2개의 변경된 파일15개의 추가작업 그리고 1개의 파일을 삭제
  1. 14 0
      csharp/src/Google.Protobuf.Test/Reflection/FieldAccessTest.cs
  2. 1 1
      csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs

+ 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
                 {