    private static LinkedList<Pair<String,String>>
    buildMappingFromCallSiteToCallee(final CFGNode caller,
                                     final CFGHandle callee) {
        final LinkedList<Pair<String,String>> result =
            new LinkedList<Pair<String,String>>();
        if (caller.getNodeType() != CFGNode.NodeType.none) {
            Iterator<CFGNode.Operand> opIter = caller.getOperands().iterator();
            opIter.next();
            Iterator<String> paramIter = callee.getParams().iterator();
            while (opIter.hasNext()) {
                assert paramIter.hasNext();
                result.add(Pair.make(paramIter.next(), PassingSolver.makeArgument(opIter.next())));
            }
            assert !paramIter.hasNext();
        } else {
            final Iterator<Element> callIter =
                XMLLinearizeASTElement.functionCall(caller.getElement()).iterator();
            final Iterator<Element> calleeIter =
                XMLLinearizeASTElement.functionDeclaration(callee.getElement()).iterator();
            for (callIter.next(), calleeIter.next(); callIter.hasNext(); )
                result.add(Pair.make(PassingSolver
                                                 .makeArgument(callIter.next()),
                                     PassingSolver
                                                 .makeArgument(calleeIter.next())));
        }
        return result;
    }

    private static LinkedList<Pair<String,String>>
    buildMappingFromCallSiteToCallee(final CFGNode caller,
                                     final CFGHandle callee) {
        final LinkedList<Pair<String,String>> result =
            new LinkedList<Pair<String,String>>();
        if (caller.getNodeType() != CFGNode.NodeType.none) {
            Iterator<CFGNode.Operand> opIter = caller.getOperands().iterator();
            opIter.next();
            Iterator<String> paramIter = callee.getParams().iterator();
            while (opIter.hasNext()) {
                assert paramIter.hasNext();
                result.add(Pair.make(PassingSolver.makeArgument(opIter.next()), paramIter.next()));
            }
            assert !paramIter.hasNext();
        } else {
            final Iterator<Element> callIter =
                XMLLinearizeASTElement.functionCall(caller.getElement()).iterator();
            final Iterator<Element> calleeIter =
                XMLLinearizeASTElement.functionDeclaration(callee.getElement()).iterator();
            for (callIter.next(), calleeIter.next(); callIter.hasNext(); )
                result.add(Pair.make(PassingSolver
                                                 .makeArgument(callIter.next()),
                                     PassingSolver
                                                 .makeArgument(calleeIter.next())));
        }
        return result;
    }
