class BotsingRawControlFlowGraph extends RawControlFlowGraph {

    public void addInterProceduralEdge(BytecodeInstruction src, BytecodeInstruction target, Set<BytecodeInstruction> targetGraphExitPoints) {
        Set<ControlFlowEdge> outgoingEdgesOfSrc = this.outgoingEdgesOf(src);
        boolean alreadyRedirected = false;
        for(BytecodeInstruction exitPoint : targetGraphExitPoints){
            if(exitPoint.isThrow()){
                LOG.debug("{} is a THROW. We omitted it for now",exitPoint);
                continue;
            }
            if(!alreadyRedirected){
                for(ControlFlowEdge outgoingEdge: outgoingEdgesOfSrc){
                    this.redirectEdgeSource(outgoingEdge,exitPoint);
                }
                alreadyRedirected = true;
            }else{
                for(ControlFlowEdge outgoingEdge: outgoingEdgesOfSrc){
                    this.addEdge(exitPoint,this.getEdgeTarget(outgoingEdge));
                }
            }
        }
        if(!alreadyRedirected){
            LOG.warn("method "+target.getMethodName()+" does not have any exit point");
        }
        this.addEdge(src, target, false);
    }

    public  BotsingRawControlFlowGraph(ClassLoader classLoader, String className, String methodName, int access);

}