import java.util.*;
import Jakarta.util.FixDosOutputStream;
import java.io.*;
public class AST_TypeNameList {
// this returns a vector of strings that correspond to a list
// of type names. It is used in manufacturing the string representation
// of a constructor
public Vector extractTypes() {
Vector v = new Vector();
AstCursor c = new AstCursor();
for ( c.FirstElement( this ); c.MoreElement(); c.NextElement() ) {
TName t = ( TName ) c.node;
v.add( t.GetName() );
}
return v;
}
public String formSignature() {
return makeSignature( extractTypes() );
}
// makeSignature is really a utility that can be called from anywhere...
static String makeSignature( Vector v ) {
int size = v.size();
String sig = "";
// Step 2: for each type, concatenate it
for ( int i=0; i<size; i++ ) {
if ( i>0 )
sig = sig + ",";
sig = sig + ( ( String ) v.elementAt( i ) );
}
return sig;
}
public String formConstructor() {
int i;
// Step 1: extract the type names
Vector v = extractTypes();
int size = v.size();
String k = " clsname( "; // actual name will be supplied later
// Step 2: for each type name, add a formal parameter
for ( i=0; i<size; i++ ) {
if ( i>0 )
k = k + ", ";
k = k + ( ( String ) v.elementAt( i ) ) + " v" + i;
}
// Step 3: finish off decl and prepare for contents
k = k + ") { super( ";
// Step 4: for each type name, add its parameter
for ( i=0; i<size; i++ ) {
if ( i>0 )
k = k + ", ";
k = k + " v" + i;
}
// Step 5: finish constructor and return
return k + "); }";
}
}