Ejemplo n.º 1
0
        private IItemContainer GetUnfoldParent(IProductElement element, VsTemplateType templateType)
        {
            var parentWithArtifactLink = element.Traverse(
                x => x.GetParent(),
                x => x.TryGetReference(ReferenceKindConstants.SolutionItem) != null);

            if (parentWithArtifactLink != null)
            {
                var referencedItems = SolutionArtifactLinkReference.GetResolvedReferences(parentWithArtifactLink, this.uriService);

                if (templateType == VsTemplateType.Project || templateType == VsTemplateType.ProjectGroup)
                {
                    var parentItem = referencedItems.FirstOrDefault(item => item.Kind == ItemKind.Solution || item.Kind == ItemKind.SolutionFolder);
                    if (parentItem != null)
                        return parentItem;
                }
                else if (templateType == VsTemplateType.Item)
                {
                    var parentItem = referencedItems.FirstOrDefault(item => item.Kind == ItemKind.Project || item.Kind == ItemKind.Folder);
                    if (parentItem != null)
                        return parentItem;
                }

                // Why not continue up??? For extension points it makes perfect sense!
                if (!(parentWithArtifactLink is IProduct))
                {
                    // The Traverse at the top first checks the stop condition on the source element itself, 
                    // meaning in our case that we would enter an infinite loop if were to get here again
                    // and pass ourselves up. So we travel one element up for the traversal.
                    return GetUnfoldParent(parentWithArtifactLink.GetParent(), templateType);
                }
            }

            return GetUnfoldParent(this.solution, templateType);
        }
Ejemplo n.º 2
0
        private IItemContainer GetUnfoldParent(IProductElement element, VsTemplateType templateType)
        {
            var parentWithArtifactLink = element.Traverse(
                x => x.GetParent(),
                x => x.TryGetReference(ReferenceKindConstants.SolutionItem) != null);

            if (parentWithArtifactLink != null)
            {
                var referencedItems = SolutionArtifactLinkReference.GetResolvedReferences(parentWithArtifactLink, this.uriService);

                if (templateType == VsTemplateType.Project || templateType == VsTemplateType.ProjectGroup)
                {
                    var parentItem = referencedItems.FirstOrDefault(item => item.Kind == ItemKind.Solution || item.Kind == ItemKind.SolutionFolder);
                    if (parentItem != null)
                    {
                        return(parentItem);
                    }
                }
                else if (templateType == VsTemplateType.Item)
                {
                    var parentItem = referencedItems.FirstOrDefault(item => item.Kind == ItemKind.Project || item.Kind == ItemKind.Folder);
                    if (parentItem != null)
                    {
                        return(parentItem);
                    }
                }

                // Why not continue up??? For extension points it makes perfect sense!
                if (!(parentWithArtifactLink is IProduct))
                {
                    // The Traverse at the top first checks the stop condition on the source element itself,
                    // meaning in our case that we would enter an infinite loop if were to get here again
                    // and pass ourselves up. So we travel one element up for the traversal.
                    return(GetUnfoldParent(parentWithArtifactLink.GetParent(), templateType));
                }
            }

            return(GetUnfoldParent(this.solution, templateType));
        }