in src/main/java/com/twitter/nodes/NodeDotGraphGenerator.java [126:156]
public List<String> getEdgeStrings() {
List<String> edges = Lists.newArrayList();
Set<Pair<String, String>> seenPairs = Sets.newHashSet();
for (Map.Entry<String, Pair<NodeInfo, EdgeInfo>> entry : depInfo.entrySet()) {
NodeInfo dep = entry.getValue().getFirst();
EdgeInfo edge = entry.getValue().getSecond();
if (dep.keyName.equals(this.keyName)) {
continue; // don't add edge to itself
}
Pair<String, String> pair = Pair.of(dep.keyName, this.keyName);
if (!seenPairs.contains(pair)) {
edges.add(String.format("%s -> %s [style=%s label=\"%s\" color=\"%s\"];",
dep.keyName, this.keyName,
edge.optional ? "dashed" : "solid",
edge.label.startsWith("DEP") ? "" : edge.label,
"condition".equals(edge.label) ? "grey" : "black"));
seenPairs.add(pair);
}
}
// Beautify predicate edges, align true and false node.
// TODO(wangtian): Temporarily commented out for now as it sometimes mess up the display,
// find a better way to do this.
// if (this.type == NodeType.PREDICATE) {
// Iterator<Pair<NodeInfo, EdgeInfo>> iter = depInfo.values().iterator();
// String name1 = iter.next().getFirst().keyName;
// String name2 = iter.next().getFirst().keyName;
// edges.add(String.format("{ rank = same; %s %s }", name1, name2));
// }
return edges;
}