X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FSSJava%2FHierarchyGraph.java;h=6a12849f157d7dc43e8f082a3a71c8cf4104f98a;hb=03f449200cf7e78de07f884509619d0e37edfacf;hp=d575f4f4f3cd2e647c3f3d9f2dff7c81320a83c7;hpb=aec24fc101dec2a1ece71783932d11eb46704ebe;p=IRC.git diff --git a/Robust/src/Analysis/SSJava/HierarchyGraph.java b/Robust/src/Analysis/SSJava/HierarchyGraph.java index d575f4f4..6a12849f 100644 --- a/Robust/src/Analysis/SSJava/HierarchyGraph.java +++ b/Robust/src/Analysis/SSJava/HierarchyGraph.java @@ -26,6 +26,8 @@ public class HierarchyGraph { Map mapDescToHNode; Map> mapHNodeToDescSet; Map mapHNodeToCurrentHNode; // tracking which node corresponds to the initial node + Map mapHNodeNameToCurrentHNode; // tracking which node corresponds to the initial + // node Map> mapMergeNodetoMergingSet; // data structures for a combination node @@ -36,8 +38,6 @@ public class HierarchyGraph { Set nodeSet; - public static int seed = 0; - // for the lattice generation Map mapHNodeToUniqueIndex; Map> mapHNodeToBasis; @@ -61,6 +61,8 @@ public class HierarchyGraph { mapHNodeToCurrentHNode = new HashMap(); + mapHNodeNameToCurrentHNode = new HashMap(); + } public Descriptor getDesc() { @@ -97,10 +99,18 @@ public class HierarchyGraph { return mapHNodeToCurrentHNode; } + public Map getMapHNodeNameToCurrentHNode() { + return mapHNodeNameToCurrentHNode; + } + public void setMapHNodeToCurrentHNode(Map mapHNodeToCurrentHNode) { this.mapHNodeToCurrentHNode = mapHNodeToCurrentHNode; } + public void setMapHNodeNameToCurrentHNode(Map mapHNodeNameToCurrentHNode) { + this.mapHNodeNameToCurrentHNode = mapHNodeNameToCurrentHNode; + } + public Map getMapDescToHNode() { return mapDescToHNode; } @@ -139,11 +149,11 @@ public class HierarchyGraph { HNode newMergeNode = mergeNodes(possibleCycleSet, false); newMergeNode.setSharedNode(true); System.out.println("### INTRODUCE A NEW MERGE NODE: " + newMergeNode); - System.out.println("### CYCLIC VALUE FLOW: " + srcHNode + " -> " + dstHNode); + System.out.println("### CYCLIC VALUE FLOW: " + srcHNode + " -> " + dstHNode + "\n"); } else { getIncomingNodeSet(dstHNode).add(srcHNode); getOutgoingNodeSet(srcHNode).add(dstHNode); - System.out.println("add an edge " + srcHNode + " -> " + dstHNode); + // System.out.println("add an edge " + srcHNode + " -> " + dstHNode); } } @@ -388,9 +398,9 @@ public class HierarchyGraph { String nodeName; boolean isMergeNode = false; if (onlyCombinationNodes) { - nodeName = "Comb" + (seed++); + nodeName = "Comb" + (LocationInference.locSeed++); } else { - nodeName = "Node" + (seed++); + nodeName = "Node" + (LocationInference.locSeed++); isMergeNode = true; } HNode newMergeNode = new HNode(nodeName); @@ -409,7 +419,7 @@ public class HierarchyGraph { } } System.out.println("--Set merging node=" + newMergeNode + " as a skeleton=" + set - + " hasSkeleton=" + hasSkeleton); + + " hasSkeleton=" + hasSkeleton + " CUR DESC=" + desc); newMergeNode.setSkeleton(hasSkeleton); for (Iterator iterator = set.iterator(); iterator.hasNext();) { @@ -446,12 +456,15 @@ public class HierarchyGraph { mergedSkeletonNode.add(merged); } } - mapMergeNodetoMergingSet.put(newMergeNode, mergedSkeletonNode); - for (Iterator iterator = mergedSkeletonNode.iterator(); iterator.hasNext();) { + + // mapMergeNodetoMergingSet.put(newMergeNode, mergedSkeletonNode); + // for (Iterator iterator = set.iterator(); iterator.hasNext();) { + mapMergeNodetoMergingSet.put(newMergeNode, set); + for (Iterator iterator = set.iterator(); iterator.hasNext();) { HNode mergedNode = (HNode) iterator.next(); addMapHNodeToCurrentHNode(mergedNode, newMergeNode); } - System.out.println("\n###mergedSkeletonNode=" + mergedSkeletonNode); + System.out.println("###mergedSkeletonNode=" + mergedSkeletonNode); System.out.println("###MERGING NODE=" + set + " new node=" + newMergeNode); for (Iterator iterator = set.iterator(); iterator.hasNext();) { @@ -471,9 +484,11 @@ public class HierarchyGraph { for (Iterator iterator = mergingSet.iterator(); iterator.hasNext();) { HNode mergingNode = (HNode) iterator.next(); mapHNodeToCurrentHNode.put(mergingNode, newNode); + mapHNodeNameToCurrentHNode.put(mergingNode.getName(), newNode); } } else { mapHNodeToCurrentHNode.put(curNode, newNode); + mapHNodeNameToCurrentHNode.put(curNode.getName(), newNode); } } @@ -484,6 +499,10 @@ public class HierarchyGraph { return mapHNodeToCurrentHNode.get(node); } + public HNode getCurrentHNode(String nodeName) { + return mapHNodeNameToCurrentHNode.get(nodeName); + } + private Set getMergingSet(HNode mergeNode) { Set mergingSet = new HashSet(); Set mergedNode = mapMergeNodetoMergingSet.get(mergeNode); @@ -643,7 +662,7 @@ public class HierarchyGraph { public HNode getCombinationNode(Set combineSet) { if (!mapCombineNodeSetToCombinationNode.containsKey(combineSet)) { - String name = "COMB" + (seed++); + String name = "COMB" + (LocationInference.locSeed++); HNode node = new HNode(name); node.setCombinationNode(true); nodeSet.add(node); @@ -715,7 +734,7 @@ public class HierarchyGraph { private void addCombinationNode(HNode curNode, Set reachToSet, Set reachableSet) { if (!mapSkeletonNodeSetToCombinationNode.containsKey(reachToSet)) { // need to create a new combination node - String nodeName = "Comb" + (seed++); + String nodeName = "Comb" + (LocationInference.locSeed++); HNode newCombinationNode = new HNode(nodeName); newCombinationNode.setCombinationNode(true); @@ -832,6 +851,8 @@ public class HierarchyGraph { clone.setMapHNodeToDescSet(getMapHNodeToDescSet()); clone.setMapHNodetoMergeSet(getMapHNodetoMergeSet()); clone.setMapHNodeToCurrentHNode(getMapHNodeToCurrentHNode()); + clone.setMapHNodeNameToCurrentHNode(getMapHNodeNameToCurrentHNode()); + return clone; }