} else {
break; case 0:
    private SDEPInfo getSDEP(Stream sender) {        if (sdepInfo != null) {            return sdepInfo;        } else {            // initialize general scheduler if needed.  (can't do this            // in constructor because graph may not be setup yet.)            if (upDownScheduler == null) {                upDownScheduler = Scheduler.createForSDEP(new Iterator(Stream.toplevel));            }            // for each receiver, calculate up/downstream info            boolean[] downstream = new boolean[receivers.size()];            for (int i=0; i<receivers.size(); i++) {                Stream receiver = (Stream)receivers.get(i);                if (upDownScheduler.isDownstreamPath(new Iterator(sender), new Iterator(receiver))) {                    downstream[i] = true;                } else if (upDownScheduler.isUpstreamPath(new Iterator(sender), new Iterator(receiver))) {                    downstream[i] = false;                } else {                    // otherwise, fail -- no path between sender and receiver                    new RuntimeException("No path between message sender and receiver in stream graph.")                        .printStackTrace();                }            }            // see if any receivers are phased.  If they are, will            // have to rebuild scheduler / SDEP graph for each            // receiver (see SDEPIterFactory for details)            boolean phasedReceiver = false;            for (int i=0; i<receivers.size(); i++) {                if (((Stream)receivers.get(i)) instanceof PhasedFilter) {                    phasedReceiver = true;                }            }            // for each receiver, calculate sdep data            SDEPData[] data = new SDEPData[receivers.size()];            SDEPIterFactory factory = null;            Scheduler scheduler = null;            for (int i=0; i<receivers.size(); i++) {                Stream receiver = (Stream)receivers.get(i);                // make sdep scheduler.  Need to redo for each receiver if phased.                if (i==0 || phasedReceiver) {                    factory = new SDEPIterFactory(sender, receiver, downstream[i]);                    scheduler = Scheduler.createForSDEP(new Iterator(Stream.toplevel, factory));                }                try {                    if (downstream[i]) {                        // if downstream path, compute dependences upstream                        data[i] = scheduler.computeSDEP(new Iterator(sender, factory),                                                        new Iterator(receiver, factory));                    } else {                        // if upstream path, compute dependences upstream                        data[i] = scheduler.computeSDEP(new Iterator(receiver, factory),                                                        new Iterator(sender, factory));                    }                } catch (NoPathException e) {                    // should not happen because we checked that there is a path                    e.printStackTrace();                }            }            sdepInfo = new SDEPInfo(data, downstream);            return sdepInfo;        }    }