private static Node resolve(int i, Node node, Map<Node, Node> original, Set<Node> rewrites, Map<Node, Node> compacted) { Node newNode=original.get(node); if(rewrites.contains(newNode)) { Node tmp=compacted.get(newNode); if(tmp==null) { String prefix=indent(i); trace("%s+ Resolving rewrite '%s' for node '%s'...",prefix,newNode,node); tmp=resolve(i+1,newNode,original,rewrites,compacted); trace("%s+ Rewrite '%s' resolved to '%s'",prefix,newNode,tmp); compacted.put(newNode, tmp); } newNode=tmp; } return newNode; }