public String descendants(RequirementGraph<Project> graph) { if (next != null && next.contains(requirement)) return "!"; if (requirement == null) return ""; Project prerequisite = getPrerequsiteEvenIfExpired(); if (prerequisite == null) return ""; Collection<Requirement<Project>> requirements = finder.getRequirements(prerequisite, graph); return " " + requirement.rightArrow(now) + " " + prerequisite + new DescendantAncestry(now, first(requirements), finder, this).descendants(graph); }