import java.util.*; import Jakarta.util.FixDosOutputStream; import Jakarta.util.Util; import java.io.*; // end Main class public class JTSParseTree { public AST_Program root = null; public boolean isExtension; // is reset by refining constructor // AST_Program root inherited from preprocess or mixinbase -- // couldn't figure out how to do it any other way static Parser myParser; public String filepath = null; // file that was parsed // private boolean isExtension; public static void setFlags( boolean typesort, boolean keysort ) { Main.typeSort = typesort; Main.keySort = keysort; } public JTSParseTree( String filename ) throws Exception { // set the file name before doing anything else // set its absolute path if all goes well. kernelConstants.globals().currentFileName = filename; FileInputStream baseFile = null; // base file baseFile = new FileInputStream( filename ); filepath = new File( filename ).getAbsolutePath(); kernelConstants.globals().currentAbsPath = filepath; myParser = Parser.getInstance( baseFile ) ; root = (AST_Program) myParser.parseAll () ; kernelConstants.globals().currentFileName = filename; kernelConstants.globals().currentAbsPath = filepath; // finally do customizable processing, and then see if // the parsed file is an extension preprocessTree( root ); // phase 1 phase2( root ); // phase 2 isExtension = root.isExtension(); } public void preprocessTree( AST_Program root ) throws Exception { // Step 1: tag each node of the tree with the name of // its origin (i.e. layername) root.setSource( root.getAspectName() ); } public void phase2( AST_Program root ) throws Exception {} public boolean isExtension() { return isExtension; } public void print() { print2file( ( String ) null ); } public void print2file( String filename ) { AstProperties props = AstProperties.open( filename ); root.print( props ); props.close(); } public void print2file( File f ) { print2file( f.toString() ); } public void print2file( Writer w ) { AstProperties props = AstProperties.open( w ); root.print( props ); props.close(); } public String getAspectName() { return root.getAspectName(); } public void setAspectName( String pname ) { root.setAspectName( pname ); } public void setPackageName( String pname ) { System.err.println( "setPackageName deprecated -- use setAspectName" ); root.setAspectName( pname ); } public static int errorCount() { return AstNode.errorCount(); } public static int warningCount() { return Jakarta.util.Util.warningCount(); } public String errorCountString() { int ecount = AstNode.errorCount(); return "Summary "+ ecount + " error" + ( ecount==1?"":"s" ); } public static void resetCounters() { Jakarta.util.Util.resetCounters(); } public static void setReportStream( PrintWriter p ) { Jakarta.util.Util.setReportStream( p ); } public static void report( String msg ) { AstNode.report( msg ); } }