/* * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered * by the modified BSD License. You should have received a copy of the * modified BSD license with this compiler. * * Copyright (c) 2005-2008, Torbjorn Ekman * All rights reserved. */ aspect FrontendMain { public class Frontend { protected Program program; protected Frontend() { program = new Program(); program.state().reset(); } public boolean process(String[] args, BytecodeReader reader, JavaParser parser) { program.initBytecodeReader(reader); program.initJavaParser(parser); initOptions(); processArgs(args); Collection files = program.options().files(); if(program.options().hasOption("-version")) { printVersion(); return false; } if(program.options().hasOption("-help") || files.isEmpty()) { printUsage(); return false; } try { for(Iterator iter = files.iterator(); iter.hasNext(); ) { String name = (String)iter.next(); if(!new File(name).exists()) System.err.println("WARNING: file \"" + name + "\" does not exist"); program.addSourceFile(name); } for(Iterator iter = program.compilationUnitIterator(); iter.hasNext(); ) { CompilationUnit unit = (CompilationUnit)iter.next(); if(unit.fromSource()) { Collection errors = unit.parseErrors(); Collection warnings = new LinkedList(); // compute static semantic errors when there are no parse errors or // the recover from parse errors option is specified if(errors.isEmpty() || program.options().hasOption("-recover")) unit.errorCheck(errors, warnings); if(!errors.isEmpty()) { processErrors(errors, unit); return false; } else { if(!warnings.isEmpty()) processWarnings(warnings, unit); processNoErrors(unit); } } } } catch (Exception e) { System.err.println(e.getMessage()); e.printStackTrace(); } return true; } protected void initOptions() { Options options = program.options(); options.initOptions(); options.addKeyOption("-version"); options.addKeyOption("-print"); options.addKeyOption("-g"); options.addKeyOption("-g:none"); options.addKeyOption("-g:lines,vars,source"); options.addKeyOption("-nowarn"); options.addKeyOption("-verbose"); options.addKeyOption("-deprecation"); options.addKeyValueOption("-classpath"); options.addKeyValueOption("-cp"); options.addKeyValueOption("-sourcepath"); options.addKeyValueOption("-bootclasspath"); options.addKeyValueOption("-extdirs"); options.addKeyValueOption("-d"); options.addKeyValueOption("-encoding"); options.addKeyValueOption("-source"); options.addKeyValueOption("-target"); options.addKeyOption("-help"); options.addKeyOption("-O"); options.addKeyOption("-J-Xmx128M"); options.addKeyOption("-recover"); } protected void processArgs(String[] args) { program.options().addOptions(args); } protected void processErrors(Collection errors, CompilationUnit unit) { System.err.println("Errors:"); for(Iterator iter2 = errors.iterator(); iter2.hasNext(); ) { System.err.println(iter2.next()); } } protected void processWarnings(Collection warnings, CompilationUnit unit) { System.err.println("Warnings:"); for(Iterator iter2 = warnings.iterator(); iter2.hasNext(); ) { System.err.println(iter2.next()); } } protected void processNoErrors(CompilationUnit unit) { } protected void printUsage() { printVersion(); System.out.println( "\n" + name() + "\n\n" + "Usage: java " + name() + " \n" + " -verbose Output messages about what the compiler is doing\n" + " -classpath Specify where to find user class files\n" + " -sourcepath Specify where to find input source files\n" + " -bootclasspath Override location of bootstrap class files\n" + " -extdirs Override location of installed extensions\n" + " -d Specify where to place generated class files\n" + " -help Print a synopsis of standard options\n" + " -version Print version information\n" ); } protected void printVersion() { System.out.println(name() + " " + url() + " Version " + version()); } protected String name() { return "Java1.4Frontend"; } protected String url() { return "(http://jastadd.cs.lth.se)"; } protected String version() { return "R20070504"; } } }