changes: building field/method hierarchy graph + inserting combination nodes at the...
[IRC.git] / Robust / src / Analysis / SSJava / SSJavaLattice.java
index 89ca9af541c0a4ee5ffbc4fcbe04a86b249c9872..4343f2de3576345407918939954d5dd4da8a08f9 100644 (file)
@@ -1,7 +1,9 @@
 package Analysis.SSJava;
 
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Set;
 
 import Util.Lattice;
@@ -28,6 +30,21 @@ public class SSJavaLattice<T> extends Lattice<T> {
     return sharedLocSet.contains(loc);
   }
 
+  public Set<T> getElementSet() {
+    Set<T> set = new HashSet<T>();
+
+    Set<T> keySet = getKeySet();
+    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+      T key = (T) iterator.next();
+      set.add(key);
+      set.addAll(getTable().get(key));
+    }
+
+    set.remove(getTopItem());
+    set.remove(getBottomItem());
+    return set;
+  }
+
   public boolean addRelationHigherToLower(T higher, T lower) {
 
     System.out.println("add a relation: " + lower + "<" + higher);
@@ -91,14 +108,12 @@ public class SSJavaLattice<T> extends Lattice<T> {
         getInBetweenElements(cur, end, elementSet);
       }
     }
-    System.out.println("            start=" + start + " end=" + end + "   element=" + elementSet);
   }
 
-  public void mergeIntoSharedLocation(Set<T> cycleSet, T newLoc) {
+  public void mergeIntoNewLocation(Set<T> cycleSet, T newLoc) {
 
-    // add a new shared loc
+    // add a new loc
     put(newLoc);
-    addSharedLoc(newLoc);
 
     Set<T> keySet = getKeySet();
 
@@ -283,4 +298,25 @@ public class SSJavaLattice<T> extends Lattice<T> {
     }
     return false;
   }
+
+  public Map<T, Set<T>> getIncomingElementMap() {
+    Map<T, Set<T>> map = new HashMap<T, Set<T>>();
+
+    Set<T> keySet = getKeySet();
+    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+      T key = (T) iterator.next();
+
+      Set<T> incomingSet = new HashSet<T>();
+
+      for (Iterator iterator2 = keySet.iterator(); iterator2.hasNext();) {
+        T in = (T) iterator2.next();
+        if (!in.equals(key) && get(in).contains(key)) {
+          incomingSet.add(in);
+        }
+      }
+      map.put(key, incomingSet);
+    }
+
+    return map;
+  }
 }