private static NodeInfo extractNodeInfo()

in src/main/java/com/twitter/nodes/NodeDotGraphGenerator.java [255:287]


  private static NodeInfo extractNodeInfo(
      Node node, Map<String, NodeInfo> nodeInfoMap, GraphContext context) {

    // Check if we have seen this before
    NodeInfo seenInfo = context.getNodeInfo(node);
    if (seenInfo != null) {
      return seenInfo;
    }

    NodeInfo info = new NodeInfo("n" + context.getKeyIdAndInc(), node);
    nodeInfoMap.put(info.keyName, info);  // put into the map first

    Node baseNode = unwrapOptional(node);

    // create dependency map, some dependencies are special and need to be added specially
    Map<String, Node> depsByStr = baseNode.getInputsByName();

    // Add all dependencies and semi-dependencies to the NodeInfo map.
    Set<? extends Enum> depEnums = node.getOptionalDependencies();
    Set<String> optionalDeps = depEnums.stream().map(e -> e.name()).collect(Collectors.toSet());
    for (Map.Entry<String, Node> depEntry : depsByStr.entrySet()) {
      Node dep = depEntry.getValue();
      // Recursively get information for all dependencies
      Node unwrappedNode = unwrapOptional(dep);
      NodeInfo depNodeInfo = extractNodeInfo(unwrappedNode, nodeInfoMap, context);
      EdgeInfo edgeInfo = new EdgeInfo(
          optionalDeps.contains(depEntry.getKey()) || dep.isOptional(),
          depEntry.getKey());
      info.depInfo.put(depEntry.getKey(), Pair.of(depNodeInfo, edgeInfo));
    }
    context.updateNodeInfo(node, info);
    return info;
  }