Beispiel #1
0
        void HandleDocumentParsed(object sender, EventArgs e)
        {
            var newDocument = Document.ParsedDocument;

            if (newDocument == null)
            {
                return;
            }
            var newTree = TypeSystemSegmentTree.Create(Document);

            if (typeSystemSegmentTree != null)
            {
                typeSystemSegmentTree.RemoveListener();
            }
            typeSystemSegmentTree = newTree;
            typeSystemSegmentTree.InstallListener(document.Editor.Document);

            this.Unit = newDocument.GetAst <SyntaxTree> ();
            this.CSharpUnresolvedFile      = newDocument.ParsedFile as CSharpUnresolvedFile;
            this.UnresolvedFileCompilation = Document.Compilation;
            if (TypeSegmentTreeUpdated != null)
            {
                TypeSegmentTreeUpdated(this, EventArgs.Empty);
            }
        }
            static void AddType(MonoDevelop.Ide.Gui.Document document, TypeSystemSegmentTree result, IUnresolvedTypeDefinition type)
            {
                int offset    = document.Editor.LocationToOffset(type.Region.Begin);
                int endOffset = type.Region.End.IsEmpty ? int.MaxValue : document.Editor.LocationToOffset(type.Region.End);

                if (endOffset < 0)
                {
                    endOffset = int.MaxValue;
                }
                result.Add(new TypeSystemTreeSegment(offset, endOffset - offset, type));
                foreach (var entity in type.Members)
                {
                    offset    = document.Editor.LocationToOffset(entity.Region.Begin);
                    endOffset = document.Editor.LocationToOffset(entity.Region.End);
                    if (endOffset < 0)
                    {
                        endOffset = int.MaxValue;
                    }
                    result.Add(new TypeSystemTreeSegment(offset, endOffset - offset, entity));
                }

                foreach (var nested in type.NestedTypes)
                {
                    AddType(document, result, nested);
                }
            }
Beispiel #3
0
            internal static TypeSystemSegmentTree Create(MonoDevelop.Ide.Gui.Document document)
            {
                TypeSystemSegmentTree result = new TypeSystemSegmentTree(document);

                foreach (var type in document.ParsedDocument.TopLevelTypeDefinitions)
                {
                    AddType(document, result, type);
                }

                return(result);
            }