+
+ // TODO: refactoring!
+ if (srcNode != null) {
+ CompositeLocation newLoc = new CompositeLocation();
+ String newLocSymbol = "Loc" + (SSJavaLattice.seed++);
+ for (int locIdx = 0; locIdx < curPrefix.size(); locIdx++) {
+ newLoc.addLocation(curPrefix.get(locIdx));
+ }
+ Location newLocationElement = new Location(desc, newLocSymbol);
+ newLoc.addLocation(newLocationElement);
+
+ Descriptor srcLocalVar = srcNode.getDescTuple().get(0);
+ methodInfo.mapDescriptorToLocation(srcLocalVar, newLoc.clone());
+ addMapLocSymbolToInferredLocation(methodInfo.getMethodDesc(), srcLocalVar, newLoc);
+ methodInfo.removeMaplocalVarToLocSet(srcLocalVar);
+
+ // add the field/var descriptor to the set of the location symbol
+ int lastIdx = srcNode.getDescTuple().size() - 1;
+ Descriptor lastFlowNodeDesc = srcNode.getDescTuple().get(lastIdx);
+ NTuple<Location> srcNodelocTuple = flowGraph.getLocationTuple(srcNode);
+ Descriptor enclosinglastLastFlowNodeDesc = srcNodelocTuple.get(lastIdx).getDescriptor();
+
+ CompositeLocation newlyInferredLocForFlowNode =
+ generateInferredCompositeLocation(methodInfo, srcNodelocTuple);
+ Location lastInferLocElement =
+ newlyInferredLocForFlowNode.get(newlyInferredLocForFlowNode.getSize() - 1);
+ Descriptor enclosingLastInferLocElement = lastInferLocElement.getDescriptor();
+
+ // getLocationInfo(enclosingLastInferLocElement).addMapLocSymbolToDescSet(
+ // lastInferLocElement.getLocIdentifier(), lastFlowNodeDesc);
+ getLocationInfo(enclosingLastInferLocElement).addMapLocSymbolToRelatedInferLoc(
+ lastInferLocElement.getLocIdentifier(), enclosinglastLastFlowNodeDesc,
+ lastFlowNodeDesc);
+
+ System.out.println("@@@@@@@ ASSIGN " + newLoc + " to SRC=" + srcNode);
+ }
+