private void edgeDepthFirstSearchItem_Click(object sender, System.EventArgs e) { if (this.netronPanel.Graph == null) { throw new Exception("Generate a graph first"); } if (this.netronPanel.Populator == null) { throw new Exception("Populator should not be null."); } ResetVertexAndEdgeColors(); // create algorithm this.vertexColors = null; this.edgeColors = new EdgeColorDictionary(); EdgeDepthFirstSearchAlgorithm edfs = new EdgeDepthFirstSearchAlgorithm(this.netronPanel.Graph, this.edgeColors); // create tracer LayoutAlgorithmTraverVisitor tracer = new LayoutAlgorithmTraverVisitor(this.netronPanel.Populator); // link to algo edfs.RegisterTreeEdgeBuilderHandlers(tracer); edfs.RegisterEdgeColorizerHandlers(tracer); // add handler to tracers tracer.UpdateVertex += new ShapeVertexEventHandler(tracer_UpdateVertex); tracer.UpdateEdge += new ConnectionEdgeEventHandler(tracer_UpdateEdge); // running algorithm Thread thread = new Thread(new ThreadStart(edfs.Compute)); thread.Start(); }
public override Problem[] Check(Method method) { this.populator.BuildGraphFromMethod(method); EdgeDepthFirstSearchAlgorithm edfs = new EdgeDepthFirstSearchAlgorithm(this.populator.Graph); NullStateVisitor vis = new NullStateVisitor(this.populator.Graph); edfs.RegisterEdgeColorizerHandlers(vis); vis.Log.WriteLine("-- Fault detection for {0}.{1}", method.DeclaringType.ToString(), method.Name ); int index = 0; ArrayList problems = new ArrayList(); for (index = 0; index < method.Parameters.Length; ++index) { Parameter param = method.Parameters[index]; vis.Clear(); vis.Log.WriteLine("-- {0} parameter", param.Name); vis.ParameterIndex = index; edfs.Initialize(); edfs.Compute(this.populator.Graph.Root); if (vis.Warnings.Count > 0 || vis.Errors.Count > 0) { this.Problems.Add( this.GetResolution(method.Name.Name, param.Name.Name) ); } } Problem[] ps = new Problem[problems.Count]; problems.CopyTo(ps, 0); return(ps); }