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