| File: InheritanceMargin\InheritanceMarginItem.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// 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. using System; using System.Collections.Immutable; using System.Linq; using System.Runtime.Serialization; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.InheritanceMargin; [DataContract] internal readonly struct InheritanceMarginItem( int lineNumber, string? topLevelDisplayText, ImmutableArray<TaggedText> displayTexts, Glyph glyph, ImmutableArray<InheritanceTargetItem> targetItems) : IEquatable<InheritanceMarginItem> { /// <summary> /// Line number used to show the margin for the member. /// </summary> [DataMember(Order = 0)] public readonly int LineNumber = lineNumber; /// <summary> /// Special display text to show when showing the 'hover' tip for a margin item. Used to override the default /// text we show that says "'X' is inherited". Used currently for showing information about top-level-imports. /// </summary> [DataMember(Order = 1)] public readonly string? TopLevelDisplayText = topLevelDisplayText; /// <summary> /// Display texts for this member. /// </summary> [DataMember(Order = 2)] public readonly ImmutableArray<TaggedText> DisplayTexts = displayTexts; /// <summary> /// Member's glyph. /// </summary> [DataMember(Order = 3)] public readonly Glyph Glyph = glyph; /// <summary> /// An array of the implementing/implemented/overriding/overridden targets for this member. /// </summary> [DataMember(Order = 4)] public readonly ImmutableArray<InheritanceTargetItem> TargetItems = targetItems; public override int GetHashCode() => throw ExceptionUtilities.Unreachable(); public override bool Equals(object? obj) => obj is InheritanceMarginItem item && Equals(item); public override string ToString() => string.Join("", DisplayTexts.Select(d => d.Text)); public bool Equals(InheritanceMarginItem other) => this.LineNumber == other.LineNumber && this.TopLevelDisplayText == other.TopLevelDisplayText && this.Glyph == other.Glyph && this.DisplayTexts.SequenceEqual(other.DisplayTexts) && this.TargetItems.SequenceEqual(other.TargetItems); public static InheritanceMarginItem? CreateOrdered( int lineNumber, string? topLevelDisplayText, ImmutableArray<TaggedText> displayTexts, Glyph glyph, ImmutableArray<InheritanceTargetItem> targetItems) => targetItems.IsEmpty ? null : new(lineNumber, topLevelDisplayText, displayTexts, glyph, Order(targetItems)); public static ImmutableArray<InheritanceTargetItem> Order(ImmutableArray<InheritanceTargetItem> targetItems) => [.. targetItems.OrderBy(t => t.DisplayName).ThenByDescending(t => t.LanguageGlyph).ThenBy(t => t.ProjectName ?? "")]; }