1 #region Copyright notice and license 2 // Protocol Buffers - Google's data interchange format 3 // Copyright 2008 Google Inc. All rights reserved. 4 // 5 // Use of this source code is governed by a BSD-style 6 // license that can be found in the LICENSE file or at 7 // https://developers.google.com/open-source/licenses/bsd 8 #endregion 9 10 namespace Google.Protobuf.Reflection 11 { 12 internal sealed class ExtensionAccessor : IFieldAccessor 13 { 14 private readonly Extension extension; 15 private readonly ReflectionUtil.IExtensionReflectionHelper helper; 16 ExtensionAccessor(FieldDescriptor descriptor)17 internal ExtensionAccessor(FieldDescriptor descriptor) 18 { 19 Descriptor = descriptor; 20 extension = descriptor.Extension; 21 helper = ReflectionUtil.CreateExtensionHelper(extension); 22 } 23 24 public FieldDescriptor Descriptor { get; } 25 Clear(IMessage message)26 public void Clear(IMessage message) 27 { 28 helper.ClearExtension(message); 29 } 30 HasValue(IMessage message)31 public bool HasValue(IMessage message) 32 { 33 return helper.HasExtension(message); 34 } 35 GetValue(IMessage message)36 public object GetValue(IMessage message) 37 { 38 return helper.GetExtension(message); 39 } 40 SetValue(IMessage message, object value)41 public void SetValue(IMessage message, object value) 42 { 43 helper.SetExtension(message, value); 44 } 45 } 46 } 47