File: System\Windows\Forms\ComponentModel\COM2Interop\ComNativeDescriptor.ComTypeDescriptor.cs
Web Access
Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.ComponentModel;
using Windows.Win32.System.Com;
using static System.TrimmingConstants;
 
namespace System.Windows.Forms.ComponentModel.Com2Interop;
 
internal partial class ComNativeDescriptor
{
    /// <summary>
    ///  The <see cref="ICustomTypeDescriptor"/> given by <see cref="ComNativeDescriptor"/> for a given type instance.
    /// </summary>
    [RequiresUnreferencedCode(ComTypeDescriptorsMessage + " Uses ComNativeDescriptor which is not trim-compatible.")]
    private sealed unsafe class ComTypeDescriptor : ICustomTypeDescriptor
    {
        private readonly ComNativeDescriptor _handler;
        private readonly object _instance;
 
        internal ComTypeDescriptor(ComNativeDescriptor handler, object instance)
        {
            _handler = handler;
            _instance = instance;
        }
 
        AttributeCollection ICustomTypeDescriptor.GetAttributes() => GetAttributes(_instance);
 
        string? ICustomTypeDescriptor.GetClassName() => GetClassName(_instance);
 
        string? ICustomTypeDescriptor.GetComponentName()
        {
            using var dispatch = ComHelpers.TryGetComScope<IDispatch>(_instance, out HRESULT hr);
            return hr.Succeeded ? GetName(dispatch) : string.Empty;
        }
 
        [RequiresUnreferencedCode(AttributesRequiresUnreferencedCodeMessage)]
        TypeConverter ICustomTypeDescriptor.GetConverter() => GetIComponentConverter();
 
        [RequiresUnreferencedCode(EventDescriptorRequiresUnreferencedCodeMessage)]
        EventDescriptor? ICustomTypeDescriptor.GetDefaultEvent() => null;
 
        [RequiresUnreferencedCode(PropertyDescriptorPropertyTypeMessage)]
        PropertyDescriptor? ICustomTypeDescriptor.GetDefaultProperty() => _handler.GetDefaultProperty(_instance);
 
        [RequiresUnreferencedCode(EditorRequiresUnreferencedCode)]
        object? ICustomTypeDescriptor.GetEditor(Type editorBaseType) => GetEditor(_instance, editorBaseType);
 
        EventDescriptorCollection ICustomTypeDescriptor.GetEvents() => new(null);
 
        [RequiresUnreferencedCode(FilterRequiresUnreferencedCodeMessage)]
        EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[]? attributes) => new(null);
 
        [RequiresUnreferencedCode(PropertyDescriptorPropertyTypeMessage)]
        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() => _handler.GetProperties(_instance);
 
        [RequiresUnreferencedCode($"{PropertyDescriptorPropertyTypeMessage} {FilterRequiresUnreferencedCodeMessage}")]
        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[]? attributes) => _handler.GetProperties(_instance);
 
        object? ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor? pd) => _instance;
    }
}