예제 #1
0
        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,
                            });
                        }
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Walks the xml element tree to build a result. This expects
        /// rootElement to be a &lt;module /&gt; 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);
        }