Inheritance: AbstractTreeNode
        /// <summary>
        /// Adds any types and namespaces, imported at the start of the document, to the declarations.
        /// </summary>
        private void AddImports(IntellisenseDeclarations declarations, DocumentTreeNode document)
        {
            // add imports to declarations
            foreach (var importNamespace in document.Imports.Keys)
            {
                ImportedNamespaceTreeNode importedNodes = document.Imports[importNamespace];

                foreach (var member in importedNodes.SourceOrigin.GetMembers(false))
                {
                    declarations.Add(member.ToTreeNode());
                }

                declarations.Add(importedNodes);
            }
        }
        public override bool EnterModule(Module node)
        {
            var document = new DocumentTreeNode(new EntitySourceOrigin(GetEntity(node)), node.LexicalInfo.FileName);

            Push(document, 0);
            currentDocument = document;

            return base.EnterModule(node);
        }
        public override void LeaveModule(Module node)
        {
            base.LeaveModule(node);

            // todo: de-nasty this
            var linesInFile = -1;

            if (node.LexicalInfo.FileName != null)
                linesInFile = File.ReadAllLines(node.LexicalInfo.FileName).Length;

            Pop(linesInFile);
            currentDocument = null;
        }