using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LLVM.ClangTidy { /// /// A decorator of sorts. Accepts a PropertyDescriptor to its constructor /// and forwards all calls to the underlying PropertyDescriptor. In this way /// we can inherit from ForwardingPropertyDescriptor and override only the /// few methods we need to customize the behavior of, while allowing the /// underlying PropertyDescriptor to do the real work. /// public abstract class ForwardingPropertyDescriptor : PropertyDescriptor { private readonly PropertyDescriptor root; protected PropertyDescriptor Root { get { return root; } } protected ForwardingPropertyDescriptor(PropertyDescriptor root) : base(root) { this.root = root; } public override void AddValueChanged(object component, EventHandler handler) { root.AddValueChanged(component, handler); } public override AttributeCollection Attributes { get { return root.Attributes; } } public override bool CanResetValue(object component) { return root.CanResetValue(component); } public override string Category { get { return root.Category; } } public override Type ComponentType { get { return root.ComponentType; } } public override TypeConverter Converter { get { return root.Converter; } } public override string Description { get { return root.Description; } } public override bool DesignTimeOnly { get { return root.DesignTimeOnly; } } public override string DisplayName { get { return root.DisplayName; } } public override bool Equals(object obj) { return root.Equals(obj); } public override PropertyDescriptorCollection GetChildProperties(object instance, Attribute[] filter) { return root.GetChildProperties(instance, filter); } public override object GetEditor(Type editorBaseType) { return root.GetEditor(editorBaseType); } public override int GetHashCode() { return root.GetHashCode(); } public override object GetValue(object component) { return root.GetValue(component); } public override bool IsBrowsable { get { return root.IsBrowsable; } } public override bool IsLocalizable { get { return root.IsLocalizable; } } public override bool IsReadOnly { get { return root.IsReadOnly; } } public override string Name { get { return root.Name; } } public override Type PropertyType { get { return root.PropertyType; } } public override void RemoveValueChanged(object component, EventHandler handler) { root.RemoveValueChanged(component, handler); } public override void ResetValue(object component) { root.ResetValue(component); } public override void SetValue(object component, object value) { root.SetValue(component, value); } public override bool ShouldSerializeValue(object component) { return root.ShouldSerializeValue(component); } public override bool SupportsChangeEvents { get { return root.SupportsChangeEvents; } } public override string ToString() { return root.ToString(); } } }