private static BidirectionalGraph<string, Edge<string>> GenerateJarDependencyGraph(JarAnalyzer jars) { BidirectionalGraph<string, Edge<string>> g = new BidirectionalGraph<string, Edge<string>>(true); foreach(Jar jar in jars.Jars) { g.AddVertex(jar.name); } foreach (Jar jar in jars.Jars) { if (jar.Summary.OutgoingDependencies.Jar != null) { foreach (Jar dstJar in jar.Summary.OutgoingDependencies.Jar) { bool exist = false; foreach (IEdge<string> edge in g.InEdges(dstJar.Text[0])) { if (edge.Source == jar.name) { exist = true; } } if (!g.InEdges(dstJar.Text[0]).Any(v => v.Source == jar.name)) { g.AddEdge(new Edge<string>(dstJar.Text[0], jar.name)); } else { Trace.WriteLine("Warning: loop detected, skipping dependency " + dstJar.Text[0] + " -> " + jar.name); } } } } return g; }