for (int i = 0; i < str.getMethods().length; i++)
for (int i = 0; i < str.getMethods().length; i++) { System.out.println(" !!! Unrolling method " + str.getMethods()[i].getName() + " in " + str);
    public static SIRStream doPropagate(SIRStream str)    {        // First, visit children (if any).        if (str instanceof SIRFeedbackLoop)        {            SIRFeedbackLoop fl = (SIRFeedbackLoop)str;            doPropagate(fl.getBody());            doPropagate(fl.getLoop());        }        if (str instanceof SIRPipeline)        {            SIRPipeline pl = (SIRPipeline)str;            Iterator iter = pl.getChildren().iterator();            while (iter.hasNext())            {                SIRStream child = (SIRStream)iter.next();                doPropagate(child);            }        }        if (str instanceof SIRSplitJoin)        {            SIRSplitJoin sj = (SIRSplitJoin)str;            Iterator iter = sj.getParallelStreams().iterator();            while (iter.hasNext())            {                SIRStream child = (SIRStream)iter.next();                doPropagate(child);            }        }                // Having recursed, do the flattening, if it's appropriate.        if (str instanceof SIRFilter)        {            // Run propagate twice, just to be sure.            new FieldProp().propagate((SIRFilter)str);            new FieldProp().propagate((SIRFilter)str);            // Run the unroller...            Unroller unroller = new Unroller(new Hashtable());            for (int i = 0; i < str.getMethods().length; i++)                str.getMethods()[i].accept(unroller);            // Then try to propagatate again.            new FieldProp().propagate((SIRFilter)str);        }                // All done, return the object.        return str;    }