import java.util.*; import Jakarta.util.FixDosOutputStream; import Jakarta.util.Util2; import java.io.*; public class UmodClassDecl { public void execute( int stage ) { MMOutput previous = null; if ( stage != 0 ) { super.execute( stage ); return; } ; NamedVector nv; // see if we need to stack nested class definitions if (up instanceof NestedClassDeclaration) { previous = Main.mmresult; Main.mmresult = new MMOutput(); } MMOutput m = Main.mmresult; m.setType( MMGlobals.Class ); m.setName( ( ( QName ) arg[0] ).GetName() ); if (previous == null) m.setlines( -1, -1 ); // entire file else m.setlines( getFirstLineNum(), getLastLineNum() ); m.setModifiers( (AstOptNode) up.arg[0] ); // do the extends clause first if ( arg[1].arg[0] == null ) m.setDefn( MMGlobals.Defines ); else { m.setDefn( MMGlobals.Extends ); nv = new NamedVector( MMGlobals.Classes ); arg[1].arg[0].harvestAST_QualifiedNames( nv ); m.union( nv ); // remember the names of the super class nv = new NamedVector( "super" ); arg[1].arg[0].harvestAST_QualifiedNames( nv ); m.union( nv ); } // now do the implements claus if ( arg[2].arg[0] != null ) { nv = new NamedVector( MMGlobals.Interfaces ); arg[2].arg[0].harvestAST_QualifiedNames( nv ); m.union( nv ); } // now harvest the field members and methods, and we're done arg[3].execute( stage ); // now pop stack if we were dealing with nested classes if (previous != null) { previous.nested.putUnique( m.getName(), m ); Main.mmresult = previous; } } }