void UpdateOutliningRegionTags(SyntaxTreeAndSnapshot syntaxTreeAndSnapshot)
        {
            _outliningRegionTags.Clear();

            var outliningDefinitions = OutliningProvider.Default.GetOutliningDefinitions(syntaxTreeAndSnapshot.SyntaxTree.Root);

            _outliningRegionTags.AddRange(ToRegionTags(outliningDefinitions, syntaxTreeAndSnapshot));
        }
        public static ImmutableList <NavigationBarItem> Build(SyntaxTreeAndSnapshot codeGenerationUnitAndSnapshot)
        {
            var syntaxRoot = codeGenerationUnitAndSnapshot?.SyntaxTree.Root as GuiDescriptionSyntax;

            return(NavigatableSections.GetItems(syntaxRoot)
                   .Select(item => new NavigationBarItem(
                               displayName: item.DisplayName,
                               imageMoniker: GdImageMonikers.GetMoniker(item.Glyph),
                               extent: item.Extent,
                               navigationPoint: item.NavigationPoint))
                   .ToImmutableList());
        }
        public static ImmutableList <NavigationBarItem> Build(SyntaxTreeAndSnapshot codeGenerationUnitAndSnapshot)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            if (codeGenerationUnitAndSnapshot == null)
            {
                return(ImmutableList <NavigationBarItem> .Empty);
            }

            return(new[] {
                new NavigationBarItem(
                    displayName: codeGenerationUnitAndSnapshot.Snapshot.TextBuffer.GetContainingProject()?.Name ?? ProjectMapper.MiscellaneousFiles,
                    imageMoniker: KnownMonikers.CSProjectNode)
            }.ToImmutableList());
        }
        IEnumerable <ITagSpan <IOutliningRegionTag> > ToRegionTags(IEnumerable <OutliningDefinition> outliningDefinitions, SyntaxTreeAndSnapshot syntaxTreeAndSnapshot)
        {
            foreach (var outliningDefinition in outliningDefinitions)
            {
                var foldingExtent = outliningDefinition.FoldingExtent;
                var previewExtent = outliningDefinition.PreviewExtent;

                var foldingSpan = new SnapshotSpan(new SnapshotPoint(syntaxTreeAndSnapshot.Snapshot, foldingExtent.Start), length: foldingExtent.Length);
                var previewSpan = new SnapshotSpan(new SnapshotPoint(syntaxTreeAndSnapshot.Snapshot, previewExtent.Start), length: previewExtent.Length);

                var tag = new OutliningRegionTag(
                    isDefaultCollapsed: outliningDefinition.IsDefaultCollapsed,
                    isImplementation: outliningDefinition.IsImplementation,
                    collapsedForm: outliningDefinition.CollapsedText,
                    collapsedHintForm: _codeContentControlProvider.CreateContentControlForOutlining(previewSpan));

                yield return(new TagSpan <IOutliningRegionTag>(foldingSpan, tag));
            }
        }