import Jakarta.util.Util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.LogRecord; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; public abstract class AstList { public void execute() { for ( AstNode node = arg[0]; node != null; node = node.right ) if ( node.arg[0] != null ) node.arg[0].execute() ; } /** * Returns an unmodifiable {@link List} of the nodes in this * <code>AstList</code>. <em>Note:</em> the actual nodes are stored, * <em>not</em> the intermediate {@link AstListNode} elements (which * are present only as data holders). Further, the value of an actual * node may be <code>null</code>, so there may be <code>null</code> * elements in the returned {@link List}. * * <p> * After the {@link List} is first computed, it is cached and returned * by later calls to this method. Therefore, if the nodes linked here * are modified, the cached copy should be set to <code>null</code> * so that the next call will construct a new copy. * * @layer<bali> */ public List toList() { if ( nodesAsList == null ) { nodesAsList = new ArrayList() ; for ( AstNode nd = arg [0] ; nd != null ; nd = nd.right ) nodesAsList.add( nd.arg [0] ) ; nodesAsList = Collections.unmodifiableList( Arrays.asList( nodesAsList.toArray( new AstNode [nodesAsList.size()] ) ) ) ; } return nodesAsList ; } private List nodesAsList = null ; }