X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FSSJava%2FFlowGraph.java;h=39d706144144bcbe0d35333d6d4b30794498305b;hb=ce668fac9745b666e401dc1a036754da8af3564c;hp=8522f2ef87284f6d319e8d1ab36cc8388fc05c89;hpb=cdfc189fb3563488aa35b9faed2165a95aaee103;p=IRC.git diff --git a/Robust/src/Analysis/SSJava/FlowGraph.java b/Robust/src/Analysis/SSJava/FlowGraph.java index 8522f2ef..39d70614 100644 --- a/Robust/src/Analysis/SSJava/FlowGraph.java +++ b/Robust/src/Analysis/SSJava/FlowGraph.java @@ -34,6 +34,9 @@ public class FlowGraph { // maps a paramter descriptor to its index Map mapParamDescToIdx; + + Map mapIdxToFlowNode; + boolean debug = true; public FlowGraph(MethodDescriptor md, Map mapParamDescToIdx) { @@ -46,6 +49,7 @@ public class FlowGraph { this.mapParamDescToIdx = new HashMap(); this.mapParamDescToIdx.putAll(mapParamDescToIdx); this.returnNodeSet = new HashSet(); + this.mapIdxToFlowNode = new HashMap(); if (!md.isStatic()) { // create a node for 'this' varialbe @@ -58,6 +62,25 @@ public class FlowGraph { thisVarNode = thisNode; } + setupMapIdxToDesc(); + + } + + private void setupMapIdxToDesc() { + + Set descSet = mapParamDescToIdx.keySet(); + for (Iterator iterator = descSet.iterator(); iterator.hasNext();) { + Descriptor paramDesc = (Descriptor) iterator.next(); + int idx = mapParamDescToIdx.get(paramDesc); + NTuple descTuple = new NTuple(); + descTuple.add(paramDesc); + mapIdxToFlowNode.put(idx, getFlowNode(descTuple)); + } + + } + + public FlowNode getParamFlowNode(int idx) { + return mapIdxToFlowNode.get(idx); } public Set getNodeSet() { @@ -90,7 +113,16 @@ public class FlowGraph { } public boolean isParamDesc(Descriptor desc) { - return mapParamDescToIdx.containsKey(desc); + + if (mapParamDescToIdx.containsKey(desc)) { + int idx = mapParamDescToIdx.get(desc); + if (!md.isStatic() && idx == 0) { + return false; + } + return true; + } + + return false; } public boolean hasEdge(NTuple fromDescTuple, NTuple toDescTuple) { @@ -183,7 +215,7 @@ public class FlowGraph { } - public void setReturnFlowNode(NTuple tuple) { + public void addReturnFlowNode(NTuple tuple) { if (!mapDescTupleToInferNode.containsKey(tuple)) { createNewFlowNode(tuple);