X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FSSJava%2FBuildLattice.java;h=de569443291e459a4539c2616c03d97a59739790;hb=d77839806b116bae81d35232998b6c1ac3ddf23d;hp=22e514d45720ffa28f64accd8455d795ebc1783d;hpb=3e9dbf9d589dc5b8ed75a35e1f4e6b02761acda6;p=IRC.git diff --git a/Robust/src/Analysis/SSJava/BuildLattice.java b/Robust/src/Analysis/SSJava/BuildLattice.java index 22e514d4..de569443 100644 --- a/Robust/src/Analysis/SSJava/BuildLattice.java +++ b/Robust/src/Analysis/SSJava/BuildLattice.java @@ -14,13 +14,8 @@ public class BuildLattice { private LocationInference infer; - private final HNode topNode; - private final HNode bottomNode; - public BuildLattice(LocationInference infer) { this.infer = infer; - topNode = new HNode(infer.ssjava.TOP); - bottomNode = new HNode(infer.ssjava.BOTTOM); } public SSJavaLattice buildLattice(Descriptor desc) { @@ -166,6 +161,7 @@ public class BuildLattice { for (Iterator iterator = nodeSet.iterator(); iterator.hasNext();) { HNode node = (HNode) iterator.next(); System.out.println("node=" + node); + if (node.isSkeleton() && (!visited.contains(node))) { visited.add(node); @@ -208,7 +204,7 @@ public class BuildLattice { } else if (endCombNodeSet.size() == 0) { // the outNode is (directly/transitively) connected to the bottom node // therefore, we just add a dummy bottom HNode to the endCombNodeSet. - endCombNodeSet.add(bottomNode); + endCombNodeSet.add(LocationInference.BOTTOMHNODE); } recurDFSNormalNode(desc, lattice, startNode, endCombNodeSet, visited, @@ -225,30 +221,26 @@ public class BuildLattice { // an intermediate node 'node' may be located between "TOP" location and a skeleton node if (simpleGraph.getIncomingNodeSet(node).size() == 0) { + // this node will be directly connected to the TOP location // start adding the following nodes from this node - // Set endNodeSetFromSimpleGraph = - // simpleGraph.getDirectlyReachableSkeletonCombinationNodeFrom(node, null); + Set endNodeSetFromSimpleGraph = + simpleGraph.getDirectlyReachableSkeletonCombinationNodeFrom(node, null); - Set endNodeSet = simpleGraph.getReachableSCNodeSet(node); - - Set endCombNormalNodeSet = new HashSet(); - for (Iterator iterator3 = endNodeSet.iterator(); iterator3.hasNext();) { + Set endCombNodeSet = new HashSet(); + for (Iterator iterator3 = endNodeSetFromSimpleGraph.iterator(); iterator3.hasNext();) { HNode endNode = (HNode) iterator3.next(); - if (endNode.isSkeleton() || endNode.isCombinationNode()) { - endCombNormalNodeSet.add(getCombinationNodeInSCGraph(desc, endNode)); - } else { - endCombNormalNodeSet.addAll(simpleGraph.getSCNodeReachToSet(endNode)); - } + endCombNodeSet.add(getCombinationNodeInSCGraph(desc, endNode)); } - HNode startNode = topNode; + System.out.println("endCombNodeSet=" + endCombNodeSet); + HNode startNode = LocationInference.TOPHNODE; visited.add(startNode); - if (endCombNormalNodeSet.size() > 0) { + if (endCombNodeSet.size() > 0) { // follows the straight line up to another skeleton/combination node // endCombNodeSet = removeTransitivelyReachToNode(desc, node, endCombNodeSet); - recurDFSNormalNode(desc, lattice, startNode, endCombNormalNodeSet, visited, + recurDFSNormalNode(desc, lattice, startNode, endCombNodeSet, visited, mapIntermediateLoc, 1, locSummary, node); } @@ -299,7 +291,7 @@ public class BuildLattice { recurDFS(desc, lattice, combinationNodeInSCGraph, endCombNodeSet, visited, mapIntermediateLoc, 1, locSummary, cnode); } else { - endCombNodeSet.add(bottomNode); + endCombNodeSet.add(LocationInference.BOTTOMHNODE); System.out.println("---endCombNodeSet is zero"); System.out.println("---endNodeSetFromSimpleGraph=" + endNodeSetFromSimpleGraph); System.out.println("---incoming=" + simpleGraph.getIncomingNodeSet(cnode));