code: private void collectTransitiveCallees(TemplateData templateData, Set<TemplateData> visited) {
      if (!visited.add(templateData)) {
        return; // avoids chasing recursive cycles
      }
      for (String callee : templateData.callees) {
        collectTransitiveCallees(getTemplateData(callee), visited);
      }
      for (String delCallee : templateData.delCallees) {
        // for {delcalls} we consider all possible targets
        for (TemplateData potentialCallee : selector.delTemplateNameToValues().get(delCallee)) {
          collectTransitiveCallees(potentialCallee, visited);
        }
      }
    }
docs: Adds all transitively called templates to {@code visited}