private void startTraversal(SMGObject pObject) { if (candidates.containsKey(pObject)) { // Processed already in continueTraversal return; } candidates.put(pObject, new HashMap<Integer, SMGSingleLinkedListCandidate>()); for (SMGEdgeHasValue hv : smg.getHVEdges(SMGEdgeHasValueFilter.objectFilter(pObject))) { if (smg.isPointer(hv.getValue())) { SMGSingleLinkedListCandidate candidate = new SMGSingleLinkedListCandidate(pObject, hv.getOffset(), 1); candidates.get(pObject).put(hv.getOffset(), candidate); continueTraversal(hv.getValue(), candidate); } } }