public override void BuildChildNodes(ITreeBuilder treeBuilder, object dataObject) { PackagesNode packages = dataObject as PackagesNode; foreach (ProjectFile projectFile in packages.Project.Files) { if (projectFile.BuildAction == BuildAction.Compile) { if (Path.GetExtension(projectFile.Name).ToLower() == ".py") { var name = PythonHelper.ModuleFromFilename(projectFile.Name); // It's only a module unless there is a "." in the name // or its the __init__.py inside the package folder. if (name.Contains(".") || Path.GetFileName(projectFile.Name).ToLower() == "__init__.py") { name = PythonHelper.PackageFromFilename(projectFile.Name); treeBuilder.AddChild(new PackageNode() { Name = name, ProjectFile = projectFile, }); } } } } }
/// <summary> /// Walks the xml element tree to build a result. This expects /// rootElement to be a <module /> element. /// <param name="rootElement"> /// A <see cref="XmlElement"/> /// </param> /// </summary> /// <param name="rootElement"> /// A <see cref="XmlElement"/> /// </param> void BuildFromXmlElement(XmlElement rootElement, StringReader content) { Debug.Assert(rootElement.LocalName == "module"); string moduleName = String.Empty; if (!String.IsNullOrEmpty(FileName)) { moduleName = PythonHelper.ModuleFromFilename(FileName); } Module = new PythonModule() { FullName = moduleName, Region = GetDomRegion(rootElement), }; foreach (XmlElement child in rootElement) { switch (child.LocalName) { case "import": BuildImport(child); break; case "class": BuildClass(child); break; case "attribute": BuildAttribute(child); break; case "function": BuildFunction(child); break; case "warning": BuildWarning(child); break; default: Debug.Assert(false, "Assert not reached"); break; } } }
void BuildClass(XmlElement element, StringReader content) { var compUnit = this.CompilationUnit as PythonCompilationUnit; Console.WriteLine("Class({0})", element.GetAttribute("name")); var name = element.GetAttribute("name"); var start = GetDomLocation(element); var region = GetDomRegion(element); var fullName = PythonHelper.ModuleFromFilename(FileName); var klass = new DomType(fullName) { Name = name, Location = start, BodyRegion = region, Modifiers = Modifiers.Public, CompilationUnit = compUnit }; compUnit.Add(klass); }