// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace System.Diagnostics { /// /// Signifies that the attributed type has a visualizer which is pointed /// to by the parameter type name strings. /// [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)] public sealed class DebuggerVisualizerAttribute : Attribute { private Type? _target; public DebuggerVisualizerAttribute(string visualizerTypeName) { VisualizerTypeName = visualizerTypeName; } public DebuggerVisualizerAttribute(string visualizerTypeName, string? visualizerObjectSourceTypeName) { VisualizerTypeName = visualizerTypeName; VisualizerObjectSourceTypeName = visualizerObjectSourceTypeName; } public DebuggerVisualizerAttribute(string visualizerTypeName, Type visualizerObjectSource) { if (visualizerObjectSource == null) { throw new ArgumentNullException(nameof(visualizerObjectSource)); } VisualizerTypeName = visualizerTypeName; VisualizerObjectSourceTypeName = visualizerObjectSource.AssemblyQualifiedName; } public DebuggerVisualizerAttribute(Type visualizer) { if (visualizer == null) { throw new ArgumentNullException(nameof(visualizer)); } VisualizerTypeName = visualizer.AssemblyQualifiedName!; } public DebuggerVisualizerAttribute(Type visualizer, Type visualizerObjectSource) { if (visualizer == null) { throw new ArgumentNullException(nameof(visualizer)); } if (visualizerObjectSource == null) { throw new ArgumentNullException(nameof(visualizerObjectSource)); } VisualizerTypeName = visualizer.AssemblyQualifiedName!; VisualizerObjectSourceTypeName = visualizerObjectSource.AssemblyQualifiedName; } public DebuggerVisualizerAttribute(Type visualizer, string? visualizerObjectSourceTypeName) { if (visualizer == null) { throw new ArgumentNullException(nameof(visualizer)); } VisualizerTypeName = visualizer.AssemblyQualifiedName!; VisualizerObjectSourceTypeName = visualizerObjectSourceTypeName; } public string? VisualizerObjectSourceTypeName { get; } public string VisualizerTypeName { get; } public string? Description { get; set; } public Type? Target { get => _target; set { if (value == null) { throw new ArgumentNullException(nameof(value)); } TargetTypeName = value.AssemblyQualifiedName; _target = value; } } public string? TargetTypeName { get; set; } } }