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); } }