for (Iterator iterator2 = keySet.iterator(); iterator2.hasNext();) {
Integer argIdx = (Integer) iterator2.next();
NTuple<Descriptor> argTuple = map.get(argIdx);
- // System.out.println("argTuple=" + argTuple);
- // if (argIdx == 0 && !min.getMethod().isStatic()) {
- // ClassDescriptor currentMethodThisType = getClassTypeDescriptor(argTuple.get(0));
- //
- // for (int i = 0; i < curPrefix.size(); i++) {
- // ClassDescriptor prefixType =
- // getClassTypeDescriptor(curPrefix.get(i).getLocDescriptor());
- // if (prefixType != null && prefixType.equals(currentMethodThisType)) {
- // System.out.println("PREFIX TYPE MATCHES WITH=" + currentMethodThisType);
- // for (Iterator iterator3 = subGlobalReachableSet.iterator(); iterator3.hasNext();) {
- // GlobalFlowNode subGlobalReachalbeNode = (GlobalFlowNode) iterator3.next();
- // if (subGlobalReachalbeNode.getLocTuple().get(0).getLocDescriptor()
- // .equals(md.getThis())) {
- // System.out.println("PREFIX FOUND=" + subGlobalReachalbeNode);
- // System.out.println("here4?!");
- //
- // return true;
- // }
- // }
- // }
- // }
- //
- // }
+
if (!(!md.isStatic() && argIdx == 0)) {
- if (argTuple.get(argTuple.size() - 1).equals(lastLocationOfPrefix.getLocDescriptor())) {
+ // if the argTuple is empty, we don't need to do with anything(LITERAL CASE).
+ if (argTuple.size() > 0
+ && argTuple.get(argTuple.size() - 1).equals(lastLocationOfPrefix.getLocDescriptor())) {
NTuple<Location> locTuple =
translateToLocTuple(md, flowGraph.getParamFlowNode(argIdx).getDescTuple());
lastLocationOfPrefix = locTuple.get(0);
return false;
}
+ public static boolean isReference(Descriptor desc) {
+
+ if (desc instanceof FieldDescriptor) {
+
+ TypeDescriptor type = ((FieldDescriptor) desc).getType();
+ if (type.isArray()) {
+ return false;
+ } else {
+ return type.isPtr();
+ }
+
+ } else if (desc instanceof VarDescriptor) {
+ TypeDescriptor type = ((VarDescriptor) desc).getType();
+ if (type.isArray()) {
+ return false;
+ } else {
+ return type.isPtr();
+ }
+ }
+
+ return false;
+ }
+
private NTuple<Descriptor> translateToDescTuple(NTuple<Location> locTuple) {
NTuple<Descriptor> descTuple = new NTuple<Descriptor>();
} else {
// all parameter is started with 'this', so PCLOC will be set relative to the composite
// location started with 'this'.
- for (int idx = 0; idx < minSize - 1; idx++) {
+ // for (int idx = 0; idx < minSize - 1; idx++) {
+ for (int idx = 0; idx < 1; idx++) {
Set<Descriptor> locDescSet = new HashSet<Descriptor>();
Location curLoc = null;
NTuple<Location> paramLocTuple = null;
+ " idx=" + idx);
if (!srcFieldDesc.equals(dstFieldDesc)) {
// add a new edge
+ System.out.println("-ADD EDGE");
getHierarchyGraph(cd).addEdge(srcFieldDesc, dstFieldDesc);
- } else if (isPrimitive(srcFieldDesc) && isPrimitive(dstFieldDesc)) {
+ } else if (!isReference(srcFieldDesc) && !isReference(dstFieldDesc)) {
+ System.out.println("-ADD EDGE");
getHierarchyGraph(cd).addEdge(srcFieldDesc, dstFieldDesc);
}
// that node if needed
if (argTuple.size() > 0
&& (argTuple.get(0).equals(GLOBALDESC) || argTuple.get(0).equals(LITERALDESC))) {
- System.out.println("***GLOBAL ARG TUPLE CASE=" + argTuple);
- System.out.println("8");
-
- NTuple<Descriptor> interTuple =
- getFlowGraph(mdCaller).createIntermediateNode().getDescTuple();
- ((InterDescriptor) interTuple.get(0)).setMethodArgIdxPair(min, idx);
- addFlowGraphEdge(mdCaller, argTuple, interTuple);
- argTuple = interTuple;
- addArgIdxMap(min, idx, argTuple);
- System.out.println("new min mapping i=" + idx + " ->" + argTuple);
+ /*
+ * System.out.println("***GLOBAL ARG TUPLE CASE=" + argTuple); System.out.println("8");
+ *
+ * NTuple<Descriptor> interTuple =
+ * getFlowGraph(mdCaller).createIntermediateNode().getDescTuple(); ((InterDescriptor)
+ * interTuple.get(0)).setMethodArgIdxPair(min, idx); addFlowGraphEdge(mdCaller,
+ * argTuple, interTuple); argTuple = interTuple; addArgIdxMap(min, idx, argTuple);
+ * System.out.println("new min mapping i=" + idx + " ->" + argTuple);
+ */
+ argTuple = new NTuple<Descriptor>();
}
addArgIdxMap(min, idx, argTuple);
analyzeFlowExpressionNode(md, nametable, an.getSrc(), nodeSetRHS, null, implicitFlowTupleSet,
false);
- // System.out.println("-analyzeFlowAssignmentNode=" + an.printNode(0));
- // System.out.println("-nodeSetLHS=" + nodeSetLHS);
- // System.out.println("-nodeSetRHS=" + nodeSetRHS);
- // System.out.println("-implicitFlowTupleSet=" + implicitFlowTupleSet);
+ System.out.println("-analyzeFlowAssignmentNode=" + an.printNode(0));
+ System.out.println("-nodeSetLHS=" + nodeSetLHS);
+ System.out.println("-nodeSetRHS=" + nodeSetRHS);
+ System.out.println("-implicitFlowTupleSet=" + implicitFlowTupleSet);
// System.out.println("-");
if (an.getOperation().getOp() >= 2 && an.getOperation().getOp() <= 12) {
NTuple<Descriptor> interTuple = null;
if (needToGenerateInterLoc(nodeSetRHS)) {
System.out.println("2");
-
interTuple = getFlowGraph(md).createIntermediateNode().getDescTuple();
}
String highLocId = pair.getFirst();
String lowLocId = pair.getSecond();
- System.out.println("addedLocSet=" + addedLocSet);
if (!addedLocSet.contains(highLocId)) {
addedLocSet.add(highLocId);
drawNode(bw, locOrder, simpleHierarchyGraph, highLocId);