public static ImmutableArray <MenuItemViewModel> CreateMenuItemsWithHeader( InheritanceRelationship relationship, IEnumerable <InheritanceTargetItem> targets) { using var _ = CodeAnalysis.PooledObjects.ArrayBuilder <MenuItemViewModel> .GetInstance(out var builder); var displayContent = relationship switch { InheritanceRelationship.ImplementedInterface => ServicesVSResources.Implemented_interfaces, InheritanceRelationship.BaseType => ServicesVSResources.Base_Types, InheritanceRelationship.DerivedType => ServicesVSResources.Derived_types, InheritanceRelationship.InheritedInterface => ServicesVSResources.Inherited_interfaces, InheritanceRelationship.ImplementingType => ServicesVSResources.Implementing_types, InheritanceRelationship.ImplementedMember => ServicesVSResources.Implemented_members, InheritanceRelationship.OverriddenMember => ServicesVSResources.Overridden_members, InheritanceRelationship.OverridingMember => ServicesVSResources.Overriding_members, InheritanceRelationship.ImplementingMember => ServicesVSResources.Implementing_members, _ => throw ExceptionUtilities.UnexpectedValue(relationship) }; var headerViewModel = new HeaderMenuItemViewModel(displayContent, GetMoniker(relationship), displayContent); builder.Add(headerViewModel); foreach (var targetItem in targets) { builder.Add(TargetMenuItemViewModel.Create(targetItem)); } return(builder.ToImmutable()); } }
public InheritanceTargetItem( InheritanceRelationship relationToMember, DefinitionItem definitionItem, Glyph glyph, string displayName) { RelationToMember = relationToMember; DefinitionItem = definitionItem; Glyph = glyph; DisplayName = displayName; }
/// <summary> /// Decide which moniker should be shown. /// </summary> public static ImageMoniker GetMoniker(InheritanceRelationship inheritanceRelationship) { // If there are multiple targets and we have the corresponding compound image, use it if (s_relationships_Shown_As_I_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag)) && s_relationships_Shown_As_O_Down_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.ImplementingOverridden); } if (s_relationships_Shown_As_I_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag)) && s_relationships_Shown_As_O_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.ImplementingOverriding); } if (s_relationships_Shown_As_I_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag)) && s_relationships_Shown_As_I_Down_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.ImplementingImplemented); } if (s_relationships_Shown_As_O_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag)) && s_relationships_Shown_As_O_Down_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.OverridingOverridden); } // Otherwise, show the image based on this preference if (s_relationships_Shown_As_I_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.Implementing); } if (s_relationships_Shown_As_I_Down_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.Implemented); } if (s_relationships_Shown_As_O_Up_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.Overriding); } if (s_relationships_Shown_As_O_Down_Arrow.Any(flag => inheritanceRelationship.HasFlag(flag))) { return(KnownMonikers.Overridden); } // The relationship is None. Don't know what image should be shown, throws throw ExceptionUtilities.UnexpectedValue(inheritanceRelationship); }
public InheritanceTargetItem( InheritanceRelationship relationToMember, DetachedDefinitionItem definitionItem, Glyph glyph, Glyph languageGlyph, string displayName, string?projectName) { RelationToMember = relationToMember; DefinitionItem = definitionItem; Glyph = glyph; LanguageGlyph = languageGlyph; DisplayName = displayName; ProjectName = projectName; }
private void AddInheritance(IModelNode node, IModelNode baseNode) { var relationship = new InheritanceRelationship(ModelRelationshipId.Create(), node, baseNode); ModelService.AddRelationship(relationship); }