Ejemplo n.º 1
0
        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;
        }