public NodeSet deepIntersection(NodeSet other) { // ExtArrayNodeSet r = new ExtArrayNodeSet(); AVLTreeNodeSet r = new AVLTreeNodeSet(); NodeProxy l, p, q; for (Iterator i = iterator(); i.hasNext(); ) { l = (NodeProxy) i.next(); if ((p = other.parentWithChild(l, false, true, NodeProxy.UNKNOWN_NODE_LEVEL)) != null) { if (p.getNodeId().equals(l.getNodeId())) p.addMatches(l); r.add(p); } } for (Iterator i = other.iterator(); i.hasNext(); ) { l = (NodeProxy) i.next(); if ((q = parentWithChild(l, false, true, NodeProxy.UNKNOWN_NODE_LEVEL)) != null) { if ((p = r.get(q)) != null) { p.addMatches(l); } else r.add(l); } } return r; }