示例#1
0
        private static void ExportAux(XElement linksElement, ProjectDependenciesModel projectDependenciesModel, ProjectInfo projectInfo, Dictionary <ProjectDesignator, bool> visitedMap)
        {
            if (linksElement == null)
            {
                throw new ArgumentNullException("linksElement");
            }
            if (projectDependenciesModel == null)
            {
                throw new ArgumentNullException("projectDependenciesModel");
            }
            if (projectInfo == null)
            {
                throw new ArgumentNullException("projectInfo");
            }
            if (visitedMap == null)
            {
                throw new ArgumentNullException("visitedMap");
            }

            ProjectDesignator projectDesignator = ProjectDesignator.FromProjectInfo(projectInfo);

            visitedMap[projectDesignator] = true;

            foreach (ProjectDependency projectDependency in projectInfo.ProjectDependencies)
            {
                ProjectDesignator dependentProjectDesignator = ProjectDesignator.FromProjectDependency(projectDependency);
                ProjectInfo       dependentProjectInfo       = projectDependenciesModel.ProjectInfos[dependentProjectDesignator];

                linksElement.Add(
                    new XElement(
                        _DgmlNamespace + "Link",
                        new XAttribute("Source", CreateProjectDisplayString(projectInfo)),
                        new XAttribute("Target", CreateProjectDisplayString(dependentProjectInfo)),
                        new XAttribute("Label", projectDependency.ProjectVersion)));

                if (visitedMap.ContainsKey(dependentProjectDesignator))
                {
                    // already processed - skip it
                    continue;
                }

                ExportAux(linksElement, projectDependenciesModel, dependentProjectInfo, visitedMap);
            }
        }
        private static void GatherEdgesAux(ProjectInfo projectInfo, ProjectDependenciesGraph projectDependenciesGraph, Dictionary <ProjectDesignator, ProjectInfoVertex> verticesMap, Dictionary <ProjectDesignator, bool> visitedMap)
        {
            // TODO IMM HI: abstract the visitor -> such code is duplicated in DgmlProjectDependenciesModelExporter

            if (projectInfo == null)
            {
                throw new ArgumentNullException("projectInfo");
            }
            if (projectDependenciesGraph == null)
            {
                throw new ArgumentNullException("projectDependenciesGraph");
            }
            if (verticesMap == null)
            {
                throw new ArgumentNullException("verticesMap");
            }

            ProjectDesignator projectDesignator = ProjectDesignator.FromProjectInfo(projectInfo);
            ProjectInfoVertex projectInfoVertex = verticesMap[projectDesignator];

            visitedMap[projectDesignator] = true;

            foreach (ProjectDependency projectDependency in projectInfo.ProjectDependencies)
            {
                ProjectDesignator dependentProjectDesignator = ProjectDesignator.FromProjectDependency(projectDependency);
                ProjectInfoVertex dependentProjectInfoVertex = verticesMap[dependentProjectDesignator];

                projectDependenciesGraph.AddEdge(
                    new Edge <ProjectInfoVertex>(
                        projectInfoVertex,
                        dependentProjectInfoVertex));

                if (visitedMap.ContainsKey(dependentProjectDesignator))
                {
                    // already processed - skip it
                    continue;
                }

                GatherEdgesAux(dependentProjectInfoVertex.ProjectInfo, projectDependenciesGraph, verticesMap, visitedMap);
            }
        }