예제 #1
0
        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());
        }
    }
예제 #2
0
 public InheritanceTargetItem(
     InheritanceRelationship relationToMember,
     DefinitionItem definitionItem,
     Glyph glyph,
     string displayName)
 {
     RelationToMember = relationToMember;
     DefinitionItem   = definitionItem;
     Glyph            = glyph;
     DisplayName      = displayName;
 }
예제 #3
0
        /// <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;
 }
예제 #5
0
        private void AddInheritance(IModelNode node, IModelNode baseNode)
        {
            var relationship = new InheritanceRelationship(ModelRelationshipId.Create(), node, baseNode);

            ModelService.AddRelationship(relationship);
        }