import java.util.*;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
// This layer adds the capability to sort the AST_FieldDecl
// members of a class declaration on the basis of a sort key.
// this is useful when generating lots of related methods --
// one can group them so that debugging and understanding
// the generated code is "easier" for programmers.
// the design is simple: AST_FieldDecl is a list of ClassBodyDeclarations
// a sort key is assigned to ClassBodyDeclarations
public class AST_FieldDecl {
// sorts the list of class body declarations
// on their sort key
public AST_FieldDecl BodySort() {
LinkedList l = new LinkedList();
AstCursor k = new AstCursor();
// Step 1: place each classBodyDecl onto a list
// and assign sort key to each classBodyDecl
for ( k.FirstElement( this ); k.MoreElement(); k.NextElement() ) {
ClassBodyDeclaration cbd =
( ClassBodyDeclaration ) k.node;
cbd.setSortKey();
l.add( cbd );
}
// Step 2: sort the list -- for a comparator, instantiate
// any concrete subclass of ClassBodyDeclaration.
Collections.sort( l, new FldVarDec() );
// Step 3: now create a new AST_FieldDecl (list) with the
// sorted classBodyDeclarations
AST_FieldDecl fd = new AST_FieldDecl();
ListIterator li = l.listIterator();
while ( li.hasNext() ) {
ClassBodyDeclaration eee = ( ClassBodyDeclaration ) li.next();
eee.Detach();
fd.add( new AST_FieldDeclElem().setParms( eee ) );
}
// Step 4: finally, replace the original AST_FieldDecl with
// the sorted one.
return ( AST_FieldDecl ) Replace( fd );
}
}