Split implementation into dependency analysis and traversal.