private void WorklistTraversal(IBidirectionalGraph <CFGBlock, TaggedEdge <CFGBlock, EdgeTag> > graph) { while (_workList.Any()) { var block = _workList.GetNext(); var nextEdges = _traversalTechnique.NextEdges(graph, block); foreach (var edge in nextEdges) { var didChange = _analysis.Analyze(edge); var target = _traversalTechnique.EdgeTarget(edge); if ((didChange || !_visited.Contains(target)) && !_workList.Contains(target)) { _workList.Add(target); } _visited.Add(target); } } }