+ private Set<HNode> removeTransitivelyReachToSet(Set<HNode> reachToSet) {
+
+ Set<HNode> toberemoved = new HashSet<HNode>();
+ Set<HNode> visited = new HashSet<HNode>();
+ for (Iterator iterator = reachToSet.iterator(); iterator.hasNext();) {
+ HNode node = (HNode) iterator.next();
+ visited.add(node);
+ recurIsReachingTo(node, reachToSet, toberemoved, visited);
+ }
+
+ Set<HNode> rSet = new HashSet<HNode>();
+ rSet.addAll(reachToSet);
+ rSet.removeAll(toberemoved);
+ return rSet;
+ }
+
+ private void recurIsReachingTo(HNode curNode, Set<HNode> reachToSet, Set<HNode> toberemoved,
+ Set<HNode> visited) {
+ Set<HNode> inNodeSet = getIncomingNodeSet(curNode);
+
+ for (Iterator iterator = inNodeSet.iterator(); iterator.hasNext();) {
+ HNode inNode = (HNode) iterator.next();
+ if (reachToSet.contains(inNode)) {
+ toberemoved.add(inNode);
+ } else if (!visited.contains(inNode)) {
+ visited.add(inNode);
+ recurIsReachingTo(inNode, reachToSet, toberemoved, visited);
+ }
+ }
+
+ }
+