Rewritten Parser/Scanner to package net.sourceforge.phpdt.internal.compiler.parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / batch / Main.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/Main.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/Main.java
deleted file mode 100644 (file)
index f833f8b..0000000
+++ /dev/null
@@ -1,1288 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v0.5 
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v05.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- ******************************************************************************/
-package net.sourceforge.phpdt.internal.compiler.batch;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.StringTokenizer;
-
-import net.sourceforge.phpdt.core.compiler.InvalidInputException;
-import net.sourceforge.phpdt.core.compiler.IProblem;
-import net.sourceforge.phpdt.internal.compiler.ClassFile;
-import net.sourceforge.phpdt.internal.compiler.CompilationResult;
-import net.sourceforge.phpdt.internal.compiler.Compiler;
-import net.sourceforge.phpdt.internal.compiler.ICompilerRequestor;
-import net.sourceforge.phpdt.internal.compiler.IErrorHandlingPolicy;
-import net.sourceforge.phpdt.internal.compiler.IProblemFactory;
-import net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit;
-import net.sourceforge.phpdt.internal.compiler.env.INameEnvironment;
-import net.sourceforge.phpdt.internal.compiler.impl.CompilerOptions;
-import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblem;
-import net.sourceforge.phpdt.internal.compiler.problem.DefaultProblemFactory;
-import net.sourceforge.phpdt.internal.compiler.problem.ProblemSeverities;
-import net.sourceforge.phpdt.internal.compiler.util.CharOperation;
-import net.sourceforge.phpdt.internal.compiler.util.HashtableOfObject;
-
-public class Main implements ProblemSeverities {
-
-       public boolean noWarn = false;
-
-       public PrintWriter out;
-       public boolean systemExitWhenFinished = true;
-       public boolean proceedOnError = false;
-
-       public boolean verbose = false;
-       public boolean produceRefInfo = false;
-       public boolean timer = false;
-       public boolean showProgress = false;
-       public long time = 0;
-       public long lineCount;
-       public boolean generatePackagesStructure;
-
-       public Hashtable options;
-       public String[] filenames;
-       public String[] encodings;
-       public String[] classpaths;
-       public String destinationPath;
-       public String log;
-       public int repetitions;
-       public int globalProblemsCount;
-       public int globalErrorsCount;
-       public int globalWarningsCount;
-       public int exportedClassFilesCounter;
-
-       public static final char[] CLASS_FILE_EXTENSION = ".class".toCharArray(); //$NON-NLS-1$
-       public final static char[] DOUBLE_QUOTES = "''".toCharArray(); //$NON-NLS-1$
-       public final static char[] SINGLE_QUOTE = "'".toCharArray(); //$NON-NLS-1$
-
-       /* Bundle containing messages */
-       public static ResourceBundle bundle;
-       public final static String bundleName =
-               "org.eclipse.jdt.internal.compiler.batch.messages";     //$NON-NLS-1$
-
-       static {
-               relocalize();
-       }
-
-       public boolean proceed = true;
-
-       public Main(PrintWriter writer, boolean systemExitWhenFinished) {
-
-               this.out = writer;
-               this.systemExitWhenFinished = systemExitWhenFinished;
-               exportedClassFilesCounter = 0;
-               options = new Hashtable();
-               options.put(
-                       CompilerOptions.OPTION_LocalVariableAttribute,
-                       CompilerOptions.DO_NOT_GENERATE);
-               options.put(
-                       CompilerOptions.OPTION_LineNumberAttribute,
-                       CompilerOptions.DO_NOT_GENERATE);
-               options.put(
-                       CompilerOptions.OPTION_SourceFileAttribute,
-                       CompilerOptions.DO_NOT_GENERATE);
-               options.put(
-                       CompilerOptions.OPTION_PreserveUnusedLocal,
-                       CompilerOptions.OPTIMIZE_OUT);
-               options.put(
-                       CompilerOptions.OPTION_ReportUnreachableCode,
-                       CompilerOptions.ERROR);
-               options.put(CompilerOptions.OPTION_ReportInvalidImport, CompilerOptions.ERROR);
-               options.put(
-                       CompilerOptions.OPTION_ReportOverridingPackageDefaultMethod,
-                       CompilerOptions.WARNING);
-               options.put(
-                       CompilerOptions.OPTION_ReportMethodWithConstructorName,
-                       CompilerOptions.WARNING);
-               options.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.WARNING);
-               options.put(
-                       CompilerOptions.OPTION_ReportHiddenCatchBlock,
-                       CompilerOptions.WARNING);
-               options.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.IGNORE);
-               options.put(
-                       CompilerOptions.OPTION_ReportUnusedParameter,
-                       CompilerOptions.IGNORE);
-               options.put(
-                       CompilerOptions.OPTION_ReportSyntheticAccessEmulation,
-                       CompilerOptions.IGNORE);
-               options.put(
-                       CompilerOptions.OPTION_ReportNonExternalizedStringLiteral,
-                       CompilerOptions.IGNORE);
-               options.put(
-                       CompilerOptions.OPTION_ReportAssertIdentifier,
-                       CompilerOptions.IGNORE);
-               options.put(
-                       CompilerOptions.OPTION_Compliance,
-                       CompilerOptions.VERSION_1_3);
-               options.put(
-                       CompilerOptions.OPTION_Source,
-                       CompilerOptions.VERSION_1_3);
-               options.put(
-                       CompilerOptions.OPTION_TargetPlatform,
-                       CompilerOptions.VERSION_1_1);
-       }
-
-       /*
-        *  Low-level API performing the actual compilation
-        */
-       public boolean compile(String[] argv) {
-
-               // decode command line arguments
-               try {
-                       configure(argv);
-                       if (proceed) {
-                               if (showProgress)
-                                       out.print(Main.bind("progress.compiling")); //$NON-NLS-1$
-                               for (int i = 0; i < repetitions; i++) {
-                                       globalProblemsCount = 0;
-                                       globalErrorsCount = 0;
-                                       globalWarningsCount = 0;
-                                       lineCount = 0;
-
-                                       if (repetitions > 1) {
-                                               out.flush();
-                                               out.println(
-                                                       Main.bind(
-                                                               "compile.repetition", //$NON-NLS-1$
-                                                               String.valueOf(i + 1),
-                                                               String.valueOf(repetitions)));
-                                       }
-                                       long startTime = System.currentTimeMillis();
-                                       // request compilation
-                                       performCompilation();
-                                       if (timer) {
-
-                                               time = System.currentTimeMillis() - startTime;
-                                               if (lineCount != 0) {
-                                                       out.println(
-                                                               Main.bind(
-                                                                       "compile.instantTime",  //$NON-NLS-1$
-                                                                       new String[] {
-                                                                               String.valueOf(lineCount),
-                                                                               String.valueOf(time),
-                                                                               String.valueOf((((int) ((lineCount * 10000.0) / time)) / 10.0))}));
-                                               } else {
-                                                       out.println(Main.bind("compile.totalTime", String.valueOf(time))); //$NON-NLS-1$
-                                               }
-                                       }
-                                       if (globalProblemsCount > 0) {
-                                               if (globalProblemsCount == 1) {
-                                                       out.print(Main.bind("compile.oneProblem")); //$NON-NLS-1$
-                                               } else {
-                                                       out.print(
-                                                               Main.bind("compile.severalProblems", String.valueOf(globalProblemsCount)));     //$NON-NLS-1$
-                                               }
-                                               out.print(" ("); //$NON-NLS-1$
-                                               if (globalErrorsCount > 0) {
-                                                       if (globalErrorsCount == 1) {
-                                                               out.print(Main.bind("compile.oneError")); //$NON-NLS-1$
-                                                       } else {
-                                                               out.print(
-                                                                       Main.bind("compile.severalErrors", String.valueOf(globalErrorsCount)));         //$NON-NLS-1$
-                                                       }
-                                               }
-                                               if (globalWarningsCount > 0) {
-                                                       if (globalErrorsCount > 0) {
-                                                               out.print(", "); //$NON-NLS-1$
-                                                       }
-                                                       if (globalWarningsCount == 1) {
-                                                               out.print(Main.bind("compile.oneWarning")); //$NON-NLS-1$
-                                                       } else {
-                                                               out.print(
-                                                                       Main.bind("compile.severalWarnings", String.valueOf(globalWarningsCount)));     //$NON-NLS-1$
-                                                       }
-                                               }
-                                               out.println(")"); //$NON-NLS-1$
-                                       }
-                                       if (exportedClassFilesCounter != 0
-                                               && (this.showProgress || this.timer || this.verbose)) {
-                                               if (exportedClassFilesCounter == 1) {
-                                                       out.print(Main.bind("compile.oneClassFileGenerated")); //$NON-NLS-1$
-                                               } else {
-                                                       out.print(
-                                                               Main.bind(
-                                                                       "compile.severalClassFilesGenerated", //$NON-NLS-1$
-                                                                       String.valueOf(exportedClassFilesCounter)));
-                                               }
-                                       }
-                               }
-                               if (showProgress)
-                                       System.out.println();
-                       }
-                       if (systemExitWhenFinished) {
-                               out.flush();
-                               System.exit(globalErrorsCount > 0 ? -1 : 0);
-                       }
-               } catch (InvalidInputException e) {
-                       out.println(e.getMessage());
-                       out.println("------------------------"); //$NON-NLS-1$
-                       printUsage();
-                       if (systemExitWhenFinished) {
-                               System.exit(-1);
-                       }
-               } catch (ThreadDeath e) { // do not stop this one
-                       throw e;
-               } catch (Throwable e) { // internal compiler error
-                       if (systemExitWhenFinished) {
-                               out.flush();
-                               if (this.log != null) {
-                                       out.close();
-                               }
-                               System.exit(-1);
-                       }
-                       //e.printStackTrace();
-               } finally {
-                       out.flush();
-                       if (this.log != null) {
-                               out.close();
-                       }
-               }
-               if (globalErrorsCount == 0){
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       /*
-        * Internal IDE API
-        */
-       public static boolean compile(String commandLine) {
-
-               return compile(commandLine, new PrintWriter(System.out));
-       }
-
-       /*
-        * Internal IDE API for test harness purpose
-        */
-       public static boolean compile(String commandLine, PrintWriter writer) {
-
-               return new Main(writer, false).compile(tokenize(commandLine));
-       }
-
-       public static String[] tokenize(String commandLine) {
-
-               int count = 0;
-               String[] arguments = new String[10];
-               StringTokenizer tokenizer = new StringTokenizer(commandLine, " \"", true); //$NON-NLS-1$
-               String token = "", lastToken; //$NON-NLS-1$
-               boolean insideQuotes = false;
-               boolean startNewToken = true;
-
-               // take care to quotes on the command line
-               // 'xxx "aaa bbb";ccc yyy' --->  {"xxx", "aaa bbb;ccc", "yyy" }
-               // 'xxx "aaa bbb;ccc" yyy' --->  {"xxx", "aaa bbb;ccc", "yyy" }
-               // 'xxx "aaa bbb";"ccc" yyy' --->  {"xxx", "aaa bbb;ccc", "yyy" }
-               // 'xxx/"aaa bbb";"ccc" yyy' --->  {"xxx/aaa bbb;ccc", "yyy" }
-               while (tokenizer.hasMoreTokens()) {
-                       lastToken = token;
-                       token = tokenizer.nextToken();
-
-                       if (token.equals(" ")) { //$NON-NLS-1$
-                               if (insideQuotes) {
-                                       arguments[count - 1] += token;
-                                       startNewToken = false;
-                               } else {
-                                       startNewToken = true;
-                               }
-                       } else if (token.equals("\"")) { //$NON-NLS-1$
-                               if (!insideQuotes && startNewToken) { //$NON-NLS-1$
-                                       if (count == arguments.length)
-                                               System.arraycopy(arguments, 0, (arguments = new String[count * 2]), 0, count);
-                                       arguments[count++] = ""; //$NON-NLS-1$
-                               }
-                               insideQuotes = !insideQuotes;
-                               startNewToken = false;
-                       } else {
-                               if (insideQuotes) {
-                                       arguments[count - 1] += token;
-                               } else {
-                                       if (token.length() > 0 && !startNewToken) {
-                                               arguments[count - 1] += token;
-                                       } else {
-                                               if (count == arguments.length)
-                                                       System.arraycopy(arguments, 0, (arguments = new String[count * 2]), 0, count);
-                                               arguments[count++] = token;
-                                       }
-                               }
-                               startNewToken = false;
-                       }
-               }
-               System.arraycopy(arguments, 0, arguments = new String[count], 0, count);
-               return arguments;
-       }
-
-       /*
-       Decode the command line arguments 
-        */
-       public void configure(String[] argv) throws InvalidInputException {
-               
-               if ((argv == null) || (argv.length == 0))
-                       throw new InvalidInputException(Main.bind("configure.noSourceFile")); //$NON-NLS-1$
-               final int InsideClasspath = 1;
-               final int InsideDestinationPath = 2;
-               final int TargetSetting = 4;
-               final int InsideLog = 8;
-               final int InsideRepetition = 16;
-               final int InsideSource = 32;
-               final int InsideDefaultEncoding = 64;
-               final int Default = 0;
-               int DEFAULT_SIZE_CLASSPATH = 4;
-               boolean warnOptionInUse = false;
-               boolean noWarnOptionInUse = false;
-               int pathCount = 0;
-               int index = -1, filesCount = 0, argCount = argv.length;
-               int mode = Default;
-               repetitions = 0;
-               boolean versionIDRequired = false;
-               boolean printUsageRequired = false;
-
-               boolean didSpecifyCompliance = false;
-               boolean didSpecifySourceLevel = false;
-               boolean didSpecifyDefaultEncoding = false;
-               boolean didSpecifyTarget = false;
-
-               String customEncoding = null;
-               String currentArg = ""; //$NON-NLS-1$
-
-               while (++index < argCount) {
-
-                       if (customEncoding != null) {
-                               throw new InvalidInputException(
-                                       Main.bind("configure.unexpectedCustomEncoding", currentArg, customEncoding)); //$NON-NLS-1$
-                       }
-
-                       currentArg = argv[index].trim();
-
-                       customEncoding = null;
-                       if (currentArg.endsWith("]")) { //$NON-NLS-1$ 
-                               // look for encoding specification
-                               int encodingStart = currentArg.indexOf('[') + 1;
-                               int encodingEnd = currentArg.length() - 1;
-                               if (encodingStart >= 1) {
-                                       if (encodingStart < encodingEnd) {
-                                               customEncoding = currentArg.substring(encodingStart, encodingEnd);
-                                               try { // ensure encoding is supported
-                                                       new InputStreamReader(new ByteArrayInputStream(new byte[0]), customEncoding);
-                                               } catch (UnsupportedEncodingException e) {
-                                                       throw new InvalidInputException(
-                                                               Main.bind("configure.unsupportedEncoding", customEncoding)); //$NON-NLS-1$
-                                               }
-                                       }
-                                       currentArg = currentArg.substring(0, encodingStart - 1);
-                               }
-                       }
-
-                       if (currentArg.endsWith(".java")) { //$NON-NLS-1$
-                               if (filenames == null) {
-                                       filenames = new String[argCount - index];
-                                       encodings = new String[argCount - index];
-                               } else if (filesCount == filenames.length) {
-                                       int length = filenames.length;
-                                       System.arraycopy(
-                                               filenames,
-                                               0,
-                                               (filenames = new String[length + argCount - index]),
-                                               0,
-                                               length);
-                                       System.arraycopy(
-                                               encodings,
-                                               0,
-                                               (encodings = new String[length + argCount - index]),
-                                               0,
-                                               length);
-                               }
-                               filenames[filesCount] = currentArg;
-                               encodings[filesCount++] = customEncoding;
-                               customEncoding = null;
-                               mode = Default;
-                               continue;
-                       }
-                       if (currentArg.equals("-log")) { //$NON-NLS-1$
-                               if (log != null)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateLog", currentArg)); //$NON-NLS-1$
-                               mode = InsideLog;
-                               continue;
-                       }
-                       if (currentArg.equals("-repeat")) { //$NON-NLS-1$
-                               if (repetitions > 0)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateRepeat", currentArg)); //$NON-NLS-1$
-                               mode = InsideRepetition;
-                               continue;
-                       }
-                       if (currentArg.equals("-source")) { //$NON-NLS-1$
-                               mode = InsideSource;
-                               didSpecifySourceLevel = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-encoding")) { //$NON-NLS-1$
-                               mode = InsideDefaultEncoding;
-                               continue;
-                       }
-                       if (currentArg.equals("-1.3")) { //$NON-NLS-1$
-                               if (didSpecifyCompliance) {
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateCompliance", currentArg));//$NON-NLS-1$
-                               }
-                               didSpecifyCompliance = true;
-                               options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_3);
-                               mode = Default;
-                               continue;
-                       }
-                       if (currentArg.equals("-1.4")) { //$NON-NLS-1$
-                               if (didSpecifyCompliance) {
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateCompliance", currentArg)); //$NON-NLS-1$
-                               }
-                               didSpecifyCompliance = true;
-                               options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_4);
-                               mode = Default;
-                               continue;
-                       }
-                       if (currentArg.equals("-d")) { //$NON-NLS-1$
-                               if (destinationPath != null)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateOutputPath", currentArg)); //$NON-NLS-1$
-                               mode = InsideDestinationPath;
-                               generatePackagesStructure = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-classpath") //$NON-NLS-1$
-                               || currentArg.equals("-cp")) { //$NON-NLS-1$ //$NON-NLS-2$
-                               if (pathCount > 0)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateClasspath", currentArg)); //$NON-NLS-1$
-                               classpaths = new String[DEFAULT_SIZE_CLASSPATH];
-                               mode = InsideClasspath;
-                               continue;
-                       }
-                       if (currentArg.equals("-progress")) { //$NON-NLS-1$
-                               mode = Default;
-                               showProgress = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-proceedOnError")) { //$NON-NLS-1$
-                               mode = Default;
-                               proceedOnError = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-time")) { //$NON-NLS-1$
-                               mode = Default;
-                               timer = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-version") //$NON-NLS-1$
-                               || currentArg.equals("-v")) { //$NON-NLS-1$ //$NON-NLS-2$
-                               versionIDRequired = true;
-                               continue;
-                       }
-                       if ("-deprecation".equals(currentArg)) { //$NON-NLS-1$
-                               warnOptionInUse = true;
-                               if (noWarnOptionInUse)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateWarningConfiguration")); //$NON-NLS-1$                            
-                               options.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.WARNING);
-                               continue;
-                       }
-                       if (currentArg.equals("-help")) { //$NON-NLS-1$
-                               printUsageRequired = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-noImportError")) { //$NON-NLS-1$
-                               mode = Default;
-                               options.put(
-                                       CompilerOptions.OPTION_ReportInvalidImport,
-                                       CompilerOptions.WARNING);
-                               continue;
-                       }
-                       if (currentArg.equals("-noExit")) { //$NON-NLS-1$
-                               mode = Default;
-                               systemExitWhenFinished = false;
-                               continue;
-                       }
-                       if (currentArg.equals("-verbose")) { //$NON-NLS-1$
-                               mode = Default;
-                               verbose = true;
-                               continue;
-                       }
-                       if (currentArg.equals("-referenceInfo")) { //$NON-NLS-1$
-                               mode = Default;
-                               produceRefInfo = true;
-                               continue;
-                       }
-                       if (currentArg.startsWith("-g")) { //$NON-NLS-1$
-                               mode = Default;
-                               String debugOption = currentArg;
-                               int length = currentArg.length();
-                               if (length == 2) {
-                                       options.put(
-                                               CompilerOptions.OPTION_LocalVariableAttribute,
-                                               CompilerOptions.GENERATE);
-                                       options.put(
-                                               CompilerOptions.OPTION_LineNumberAttribute,
-                                               CompilerOptions.GENERATE);
-                                       options.put(
-                                               CompilerOptions.OPTION_SourceFileAttribute,
-                                               CompilerOptions.GENERATE);
-                                       continue;
-                               }
-                               if (length > 3) {
-                                       options.put(
-                                               CompilerOptions.OPTION_LocalVariableAttribute,
-                                               CompilerOptions.DO_NOT_GENERATE);
-                                       options.put(
-                                               CompilerOptions.OPTION_LineNumberAttribute,
-                                               CompilerOptions.DO_NOT_GENERATE);
-                                       options.put(
-                                               CompilerOptions.OPTION_SourceFileAttribute,
-                                               CompilerOptions.DO_NOT_GENERATE);
-                                       if (length == 7 && debugOption.equals("-g:none")) //$NON-NLS-1$
-                                               continue;
-                                       StringTokenizer tokenizer =
-                                               new StringTokenizer(debugOption.substring(3, debugOption.length()), ","); //$NON-NLS-1$
-                                       while (tokenizer.hasMoreTokens()) {
-                                               String token = tokenizer.nextToken();
-                                               if (token.equals("vars")) { //$NON-NLS-1$
-                                                       options.put(
-                                                               CompilerOptions.OPTION_LocalVariableAttribute,
-                                                               CompilerOptions.GENERATE);
-                                               } else if (token.equals("lines")) { //$NON-NLS-1$
-                                                       options.put(
-                                                               CompilerOptions.OPTION_LineNumberAttribute,
-                                                               CompilerOptions.GENERATE);
-                                               } else if (token.equals("source")) { //$NON-NLS-1$
-                                                       options.put(
-                                                               CompilerOptions.OPTION_SourceFileAttribute,
-                                                               CompilerOptions.GENERATE);
-                                               } else {
-                                                       throw new InvalidInputException(
-                                                               Main.bind("configure.invalidDebugOption", debugOption)); //$NON-NLS-1$
-                                                       //$NON-NLS-1$
-                                               }
-                                       }
-                                       continue;
-                               }
-                               throw new InvalidInputException(
-                                       Main.bind("configure.invalidDebugOption", debugOption)); //$NON-NLS-1$
-                       }
-                       if (currentArg.startsWith("-nowarn")) { //$NON-NLS-1$
-                               noWarnOptionInUse = true;
-                               noWarn = true;
-                               if (warnOptionInUse)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateWarningConfiguration")); //$NON-NLS-1$
-                               mode = Default;
-                               continue;
-                       }
-                       if (currentArg.startsWith("-warn")) { //$NON-NLS-1$
-                               warnOptionInUse = true;
-                               if (noWarnOptionInUse)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateWarningConfiguration")); //$NON-NLS-1$
-                               mode = Default;
-                               String warningOption = currentArg;
-                               int length = currentArg.length();
-                               if (length == 10 && warningOption.equals("-warn:none")) { //$NON-NLS-1$
-                                       noWarn = true;
-                                       continue;
-                               }
-                               if (length < 6)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.invalidWarningConfiguration", warningOption)); //$NON-NLS-1$
-                               StringTokenizer tokenizer =
-                                       new StringTokenizer(warningOption.substring(6, warningOption.length()), ","); //$NON-NLS-1$
-                               int tokenCounter = 0;
-
-                               options.put(
-                                       CompilerOptions.OPTION_ReportOverridingPackageDefaultMethod,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportMethodWithConstructorName,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportDeprecation, 
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportHiddenCatchBlock,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportUnusedLocal, 
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportUnusedParameter,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportSyntheticAccessEmulation,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportNonExternalizedStringLiteral,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportAssertIdentifier,
-                                       CompilerOptions.IGNORE);
-                               options.put(
-                                       CompilerOptions.OPTION_ReportUnusedImport,
-                                       CompilerOptions.IGNORE);
-
-                               while (tokenizer.hasMoreTokens()) {
-                                       String token = tokenizer.nextToken();
-                                       tokenCounter++;
-                                       if (token.equals("constructorName")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportMethodWithConstructorName,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("packageDefaultMethod")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportOverridingPackageDefaultMethod,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("maskedCatchBlocks")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportHiddenCatchBlock,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("deprecation")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportDeprecation, 
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("unusedLocals")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportUnusedLocal, 
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("unusedArguments")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportUnusedParameter,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("unusedImports")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportUnusedImport,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("syntheticAccess")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportSyntheticAccessEmulation,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("nls")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportNonExternalizedStringLiteral,
-                                                       CompilerOptions.WARNING);
-                                       } else if (token.equals("assertIdentifier")) { //$NON-NLS-1$
-                                               options.put(
-                                                       CompilerOptions.OPTION_ReportAssertIdentifier,
-                                                       CompilerOptions.WARNING);
-                                       } else {
-                                               throw new InvalidInputException(Main.bind("configure.invalidWarning", token)); //$NON-NLS-1$
-                                       }
-                               }
-                               if (tokenCounter == 0)
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.invalidWarningOption", currentArg)); //$NON-NLS-1$
-                               continue;
-                       }
-                       if (currentArg.equals("-target")) { //$NON-NLS-1$
-                               didSpecifyTarget = true;
-                               mode = TargetSetting;
-                               continue;
-                       }
-                       if (currentArg.equals("-preserveAllLocals")) { //$NON-NLS-1$
-                               options.put(
-                                       CompilerOptions.OPTION_PreserveUnusedLocal,
-                                       CompilerOptions.PRESERVE);
-                               continue;
-                       }
-                       if (mode == TargetSetting) {
-                               if (currentArg.equals("1.1")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_1);
-                               } else if (currentArg.equals("1.2")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_2);
-                               } else if (currentArg.equals("1.3")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_3);
-                               } else if (currentArg.equals("1.4")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_4);
-                               } else {
-                                       throw new InvalidInputException(Main.bind("configure.targetJDK", currentArg)); //$NON-NLS-1$
-                               }
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideLog) {
-                               log = currentArg;
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideRepetition) {
-                               try {
-                                       repetitions = Integer.parseInt(currentArg);
-                                       if (repetitions <= 0) {
-                                               throw new InvalidInputException(Main.bind("configure.repetition", currentArg)); //$NON-NLS-1$
-                                       }
-                               } catch (NumberFormatException e) {
-                                       throw new InvalidInputException(Main.bind("configure.repetition", currentArg)); //$NON-NLS-1$
-                               }
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideSource) {
-                               if (currentArg.equals("1.3")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_3);
-                               } else if (currentArg.equals("1.4")) { //$NON-NLS-1$
-                                       options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_4);
-                               } else {
-                                       throw new InvalidInputException(Main.bind("configure.source", currentArg)); //$NON-NLS-1$
-                               }
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideDefaultEncoding) {
-                               if (didSpecifyDefaultEncoding) {
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.duplicateDefaultEncoding", currentArg)); //$NON-NLS-1$
-                               }
-                               try { // ensure encoding is supported
-                                       new InputStreamReader(new ByteArrayInputStream(new byte[0]), currentArg);
-                               } catch (UnsupportedEncodingException e) {
-                                       throw new InvalidInputException(
-                                               Main.bind("configure.unsupportedEncoding", currentArg)); //$NON-NLS-1$
-                               }
-                               options.put(CompilerOptions.OPTION_Encoding, currentArg);
-                               didSpecifyDefaultEncoding = true;
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideDestinationPath) {
-                               destinationPath = currentArg;
-                               mode = Default;
-                               continue;
-                       }
-                       if (mode == InsideClasspath) {
-                               StringTokenizer tokenizer = new StringTokenizer(currentArg, File.pathSeparator);
-                               while (tokenizer.hasMoreTokens()) {
-                                       int length;
-                                       if ((length = classpaths.length) <= pathCount) {
-                                               System.arraycopy(
-                                                       classpaths,
-                                                       0,
-                                                       (classpaths = new String[length * 2]),
-                                                       0,
-                                                       length);
-                                       }
-                                       classpaths[pathCount++] = tokenizer.nextToken();
-                               }
-                               mode = Default;
-                               continue;
-                       }
-                       //default is input directory
-                       currentArg = currentArg.replace('/', File.separatorChar);
-                       if (currentArg.endsWith(File.separator))
-                               currentArg =
-                                       currentArg.substring(0, currentArg.length() - File.separator.length());
-                       File dir = new File(currentArg);
-                       if (!dir.isDirectory())
-                               throw new InvalidInputException(
-                                       Main.bind("configure.directoryNotExist", currentArg)); //$NON-NLS-1$
-                       FileFinder finder = new FileFinder();
-                       try {
-                               finder.find(dir, ".JAVA", verbose); //$NON-NLS-1$
-                       } catch (Exception e) {
-                               throw new InvalidInputException(Main.bind("configure.IOError", currentArg)); //$NON-NLS-1$
-                       }
-                       if (filenames != null) {
-                               // some source files were specified explicitly
-                               String results[] = finder.resultFiles;
-                               int length = results.length;
-                               System.arraycopy(
-                                       filenames,
-                                       0,
-                                       (filenames = new String[length + filesCount]),
-                                       0,
-                                       filesCount);
-                               System.arraycopy(
-                                       encodings,
-                                       0,
-                                       (encodings = new String[length + filesCount]),
-                                       0,
-                                       filesCount);
-                               System.arraycopy(results, 0, filenames, filesCount, length);
-                               for (int i = 0; i < length; i++) {
-                                       encodings[filesCount + i] = customEncoding;
-                               }
-                               filesCount += length;
-                               customEncoding = null;
-                       } else {
-                               filenames = finder.resultFiles;
-                               filesCount = filenames.length;
-                               encodings = new String[filesCount];
-                               for (int i = 0; i < filesCount; i++) {
-                                       encodings[i] = customEncoding;
-                               }
-                               customEncoding = null;
-                       }
-                       mode = Default;
-                       continue;
-               }
-
-               if (noWarn) {
-                       // filter options which are related to the assist component
-                       Object[] entries = options.entrySet().toArray();
-                       for (int i = 0, max = entries.length; i < max; i++) {
-                               Map.Entry entry = (Map.Entry) entries[i];
-                               if (!(entry.getKey() instanceof String))
-                                       continue;
-                               if (!(entry.getValue() instanceof String))
-                                       continue;
-                               if (((String) entry.getValue()).equals(CompilerOptions.WARNING)) {
-                                       options.put((String) entry.getKey(), CompilerOptions.IGNORE);
-                               }
-                       }
-               }
-               /*
-                * Standalone options
-                */
-               if (versionIDRequired) {
-                       out.println(Main.bind("configure.version", Main.bind("compiler.version"))); //$NON-NLS-1$ //$NON-NLS-2$
-                       out.println();
-                       proceed = false;
-                       return;
-               }
-
-               if (printUsageRequired) {
-                       printUsage();
-                       proceed = false;
-                       return;
-               }
-
-               if (filesCount != 0)
-                       System.arraycopy(
-                               filenames,
-                               0,
-                               (filenames = new String[filesCount]),
-                               0,
-                               filesCount);
-               if (pathCount == 0) {
-                       String classProp = System.getProperty("DEFAULT_CLASSPATH"); //$NON-NLS-1$
-                       if ((classProp == null) || (classProp.length() == 0)) {
-                               out.println(Main.bind("configure.noClasspath")); //$NON-NLS-1$
-                               classProp = "."; //$NON-NLS-1$
-                       }
-                       StringTokenizer tokenizer = new StringTokenizer(classProp, File.pathSeparator);
-                       classpaths = new String[tokenizer.countTokens()];
-                       while (tokenizer.hasMoreTokens()) {
-                               classpaths[pathCount++] = tokenizer.nextToken();
-                       }
-               }
-
-               if (classpaths == null)
-                       classpaths = new String[0];
-               System.arraycopy(
-                       classpaths,
-                       0,
-                       (classpaths = new String[pathCount]),
-                       0,
-                       pathCount);
-               for (int i = 0, max = classpaths.length; i < max; i++) {
-                       File file = new File(classpaths[i]);
-                       if (!file.exists()) // signal missing classpath entry file
-                               out.println(Main.bind("configure.incorrectClasspath", classpaths[i])); //$NON-NLS-1$
-               }
-               if (destinationPath == null) {
-                       generatePackagesStructure = false;
-               } else if ("none".equals(destinationPath)) { //$NON-NLS-1$
-                       destinationPath = null;
-               }
-
-               if (filenames == null)
-                       throw new InvalidInputException(Main.bind("configure.noSource")); //$NON-NLS-1$
-
-               // check and set compliance/source/target compatibilities
-               if (!didSpecifyCompliance){
-                               if (options.get(CompilerOptions.OPTION_Source).equals(CompilerOptions.VERSION_1_4)){
-                                       options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_4);
-                               } else {
-                                       options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_3);
-                               }
-               }
-               String compliance = (String)options.get(CompilerOptions.OPTION_Compliance);
-               if (CompilerOptions.VERSION_1_4.equals(compliance)){
-                       
-                       // default 1.4 settings
-                       if (!didSpecifySourceLevel){
-                               options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_4);
-                       }
-                       if (!didSpecifyTarget){
-                               options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_4);
-                       }
-               } else if (CompilerOptions.VERSION_1_3.equals(compliance)){
-
-                       // default 1.4 settings
-                       if (!didSpecifySourceLevel){
-                               options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_3);
-                       }
-                       if (!didSpecifyTarget){
-                               options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_1);
-                       }
-               }
-               // compliance must be 1.4 if source is 1.4
-               if (options.get(CompilerOptions.OPTION_Source).equals(CompilerOptions.VERSION_1_4)
-                               && !options.get(CompilerOptions.OPTION_Compliance).equals(CompilerOptions.VERSION_1_4)){ 
-                               throw new InvalidInputException(Main.bind("configure.incompatibleComplianceForSource14", (String)options.get(CompilerOptions.OPTION_Compliance))); //$NON-NLS-1$
-               }
-               
-               // target must be 1.4 if source is 1.4
-               if (options.get(CompilerOptions.OPTION_Source).equals(CompilerOptions.VERSION_1_4)
-                               && !options.get(CompilerOptions.OPTION_TargetPlatform).equals(CompilerOptions.VERSION_1_4)){ 
-                               throw new InvalidInputException(Main.bind("configure.incompatibleTargetForSource14", (String)options.get(CompilerOptions.OPTION_TargetPlatform))); //$NON-NLS-1$
-               }
-
-               // target cannot be 1.4 if compliance is 1.3
-               if (options.get(CompilerOptions.OPTION_TargetPlatform).equals(CompilerOptions.VERSION_1_4)
-                               && !options.get(CompilerOptions.OPTION_Compliance).equals(CompilerOptions.VERSION_1_4)){ 
-                               throw new InvalidInputException(Main.bind("configure.incompatibleComplianceForTarget14", (String)options.get(CompilerOptions.OPTION_Compliance))); //$NON-NLS-1$
-               }
-               
-               if (log != null) {
-                       try {
-                               out = new PrintWriter(new FileOutputStream(log, false));
-                       } catch (IOException e) {
-                               throw new InvalidInputException(Main.bind("configure.cannotOpenLog")); //$NON-NLS-1$
-                       }
-               } else {
-                       showProgress = false;
-               }
-
-               if (repetitions == 0) {
-                       repetitions = 1;
-               }
-       }
-       public Map getOptions() {
-               return this.options;
-       }
-       /*
-        * Answer the component to which will be handed back compilation results from the compiler
-        */
-       public ICompilerRequestor getBatchRequestor() {
-               return new ICompilerRequestor() {
-                       int lineDelta = 0;
-                       public void acceptResult(CompilationResult compilationResult) {
-                               if (compilationResult.lineSeparatorPositions != null) {
-                                       int unitLineCount = compilationResult.lineSeparatorPositions.length;
-                                       lineCount += unitLineCount;
-                                       lineDelta += unitLineCount;
-                                       if (showProgress
-                                               && lineDelta > 2000) { // in -log mode, dump a dot every 2000 lines compiled
-                                               System.out.print('.');
-                                               lineDelta = 0;
-                                       }
-                               }
-                               if (compilationResult.hasProblems()) {
-                                       IProblem[] problems = compilationResult.getProblems();
-                                       int count = problems.length;
-                                       int localErrorCount = 0;
-                                       for (int i = 0; i < count; i++) {
-                                               if (problems[i] != null) {
-                                                       globalProblemsCount++;
-                                                       if (localErrorCount == 0)
-                                                               out.println("----------"); //$NON-NLS-1$
-                                                       out.print(
-                                                               globalProblemsCount
-                                                                       + ". "  //$NON-NLS-1$
-                                                                       + (problems[i].isError()
-                                                                               ? Main.bind("requestor.error")  //$NON-NLS-1$
-                                                                               : Main.bind("requestor.warning")));  //$NON-NLS-1$
-                                                       if (problems[i].isError()) {
-                                                               globalErrorsCount++;
-                                                       } else {
-                                                               globalWarningsCount++;
-                                                       }
-                                                       out.print(" "); //$NON-NLS-1$
-                                                       out.print(
-                                                               Main.bind("requestor.in", new String(problems[i].getOriginatingFileName()))); //$NON-NLS-1$
-                                                       try {
-                                                               out.println(
-                                                                       ((DefaultProblem) problems[i]).errorReportSource(
-                                                                               compilationResult.compilationUnit));
-                                                               out.println(problems[i].getMessage());
-                                                       } catch (Exception e) {
-                                                               out.println(
-                                                                       Main.bind("requestor.notRetrieveErrorMessage", problems[i].toString())); //$NON-NLS-1$
-                                                       }
-                                                       out.println("----------"); //$NON-NLS-1$
-                                                       if (problems[i].isError())
-                                                               localErrorCount++;
-                                               }
-                                       };
-                                       // exit?
-                                       if (systemExitWhenFinished && !proceedOnError && (localErrorCount > 0)) {
-                                               out.flush();
-                                               System.exit(-1);
-                                       }
-                               }
-                               outputClassFiles(compilationResult);
-                       }
-               };
-       }
-       /*
-        *  Build the set of compilation source units
-        */
-       public CompilationUnit[] getCompilationUnits()
-               throws InvalidInputException {
-               int fileCount = filenames.length;
-               CompilationUnit[] units = new CompilationUnit[fileCount];
-               HashtableOfObject knownFileNames = new HashtableOfObject(fileCount);
-
-               String defaultEncoding = (String) options.get(CompilerOptions.OPTION_Encoding);
-               if ("".equals(defaultEncoding)) //$NON-NLS-1$
-                       defaultEncoding = null; //$NON-NLS-1$
-
-               for (int i = 0; i < fileCount; i++) {
-                       char[] charName = filenames[i].toCharArray();
-                       if (knownFileNames.get(charName) != null) {
-                               throw new InvalidInputException(Main.bind("unit.more", filenames[i])); //$NON-NLS-1$
-                       } else {
-                               knownFileNames.put(charName, charName);
-                       }
-                       File file = new File(filenames[i]);
-                       if (!file.exists())
-                               throw new InvalidInputException(Main.bind("unit.missing", filenames[i])); //$NON-NLS-1$
-                       String encoding = encodings[i];
-                       if (encoding == null)
-                               encoding = defaultEncoding;
-                       units[i] = new CompilationUnit(null, filenames[i], encoding);
-               }
-               return units;
-       }
-       /*
-        *  Low-level API performing the actual compilation
-        */
-       public IErrorHandlingPolicy getHandlingPolicy() {
-
-               // passes the initial set of files to the batch oracle (to avoid finding more than once the same units when case insensitive match)     
-               return new IErrorHandlingPolicy() {
-                       public boolean stopOnFirstError() {
-                               return false;
-                       }
-                       public boolean proceedOnErrors() {
-                               return proceedOnError; // stop if there are some errors 
-                       }
-               };
-       }
-       /*
-        *  Low-level API performing the actual compilation
-        */
-       public FileSystem getLibraryAccess() {
-
-               String defaultEncoding = (String) options.get(CompilerOptions.OPTION_Encoding);
-               if ("".equals(defaultEncoding)) //$NON-NLS-1$
-                       defaultEncoding = null; //$NON-NLS-1$   
-               return new FileSystem(classpaths, filenames, defaultEncoding);
-       }
-       /*
-        *  Low-level API performing the actual compilation
-        */
-       public IProblemFactory getProblemFactory() {
-               return new DefaultProblemFactory(Locale.getDefault());
-       }
-       /*
-        * External API
-        */
-
-       public static void main(String[] argv) {
-               new Main(new PrintWriter(System.out), true).compile(argv);
-       }
-       // Dump classfiles onto disk for all compilation units that where successfull.
-
-       public void outputClassFiles(CompilationResult unitResult) {
-
-               if (!((unitResult == null) || (unitResult.hasErrors() && !proceedOnError))) {
-                       Enumeration classFiles = unitResult.compiledTypes.elements();
-                       if (!this.generatePackagesStructure) {
-                               while (classFiles.hasMoreElements()) {
-                                       this.destinationPath = extractDestinationPathFromSourceFile(unitResult);
-                                       // retrieve the key and the corresponding classfile
-                                       ClassFile classFile = (ClassFile) classFiles.nextElement();
-                                       char[] filename = classFile.fileName();
-                                       int length = filename.length;
-                                       char[] relativeName = new char[length + 6];
-                                       System.arraycopy(filename, 0, relativeName, 0, length);
-                                       System.arraycopy(CLASS_FILE_EXTENSION, 0, relativeName, length, 6);
-                                       CharOperation.replace(relativeName, '/', File.separatorChar);
-                                       try {
-                                               ClassFile.writeToDisk(
-                                                       generatePackagesStructure,
-                                                       destinationPath,
-                                                       new String(relativeName),
-                                                       classFile.getBytes());
-                                       } catch (IOException e) {
-                                               String fileName = destinationPath + new String(relativeName);
-                                               e.printStackTrace();
-                                               System.out.println(Main.bind("output.noClassFileCreated", fileName));  //$NON-NLS-1$
-                                       }
-                                       exportedClassFilesCounter++;
-                               }
-                       } else if (destinationPath != null) {
-                               while (classFiles.hasMoreElements()) {
-                                       // retrieve the key and the corresponding classfile
-                                       ClassFile classFile = (ClassFile) classFiles.nextElement();
-                                       char[] filename = classFile.fileName();
-                                       int length = filename.length;
-                                       char[] relativeName = new char[length + 6];
-                                       System.arraycopy(filename, 0, relativeName, 0, length);
-                                       System.arraycopy(CLASS_FILE_EXTENSION, 0, relativeName, length, 6);
-                                       CharOperation.replace(relativeName, '/', File.separatorChar);
-                                       try {
-                                               ClassFile.writeToDisk(
-                                                       generatePackagesStructure,
-                                                       destinationPath,
-                                                       new String(relativeName),
-                                                       classFile.getBytes());
-                                       } catch (IOException e) {
-                                               String fileName = destinationPath + new String(relativeName);
-                                               e.printStackTrace();
-                                               System.out.println(Main.bind("output.noClassFileCreated", fileName)); //$NON-NLS-1$
-                                       }
-                                       exportedClassFilesCounter++;
-                               }
-                       }
-               }
-       }
-       /*
-        *  Low-level API performing the actual compilation
-        */
-       public void performCompilation() throws InvalidInputException {
-
-               INameEnvironment environment = getLibraryAccess();
-               Compiler batchCompiler =
-                       new Compiler(
-                               environment,
-                               getHandlingPolicy(),
-                               getOptions(),
-                               getBatchRequestor(),
-                               getProblemFactory());
-               CompilerOptions options = batchCompiler.options;
-
-               // set the non-externally configurable options.
-               options.setVerboseMode(verbose);
-               options.produceReferenceInfo(produceRefInfo);
-               batchCompiler.compile(getCompilationUnits());
-
-               // cleanup
-               environment.cleanup();
-       }
-       public void printUsage() {
-               out.println(Main.bind("misc.usage", Main.bind("compiler.version"))); //$NON-NLS-1$ //$NON-NLS-2$
-               out.flush();
-       }
-
-       /**
-        * Creates a NLS catalog for the given locale.
-        */
-       public static void relocalize() {
-               bundle = ResourceBundle.getBundle(bundleName, Locale.getDefault());
-       }
-
-       /**
-        * Lookup the message with the given ID in this catalog 
-        */
-       public static String bind(String id) {
-               return bind(id, (String[]) null);
-       }
-
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given string values.
-        */
-       public static String bind(String id, String[] bindings) {
-               if (id == null)
-                       return "No message available"; //$NON-NLS-1$
-               String message = null;
-               try {
-                       message = bundle.getString(id);
-               } catch (MissingResourceException e) {
-                       // If we got an exception looking for the message, fail gracefully by just returning
-                       // the id we were looking for.  In most cases this is semi-informative so is not too bad.
-                       return "Missing message: " + id + " in: " + bundleName; //$NON-NLS-2$ //$NON-NLS-1$
-               }
-               // for compatibility with MessageFormat which eliminates double quotes in original message
-               char[] messageWithNoDoubleQuotes =
-                       CharOperation.replace(message.toCharArray(), DOUBLE_QUOTES, SINGLE_QUOTE);
-               message = new String(messageWithNoDoubleQuotes);
-
-               if (bindings == null)
-                       return message;
-
-               int length = message.length();
-               int start = -1;
-               int end = length;
-               StringBuffer output = new StringBuffer(80);
-               while (true) {
-                       if ((end = message.indexOf('{', start)) > -1) {
-                               output.append(message.substring(start + 1, end));
-                               if ((start = message.indexOf('}', end)) > -1) {
-                                       int index = -1;
-                                       try {
-                                               index = Integer.parseInt(message.substring(end + 1, start));
-                                               output.append(bindings[index]);
-                                       } catch (NumberFormatException nfe) {
-                                               output.append(message.substring(end + 1, start + 1));
-                                       } catch (ArrayIndexOutOfBoundsException e) {
-                                               output.append("{missing " + Integer.toString(index) + "}"); //$NON-NLS-2$ //$NON-NLS-1$
-                                       }
-                               } else {
-                                       output.append(message.substring(end, length));
-                                       break;
-                               }
-                       } else {
-                               output.append(message.substring(start + 1, length));
-                               break;
-                       }
-               }
-               return output.toString();
-       }
-
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given string.
-        */
-       public static String bind(String id, String binding) {
-               return bind(id, new String[] { binding });
-       }
-
-       /**
-        * Lookup the message with the given ID in this catalog and bind its
-        * substitution locations with the given strings.
-        */
-       public static String bind(String id, String binding1, String binding2) {
-               return bind(id, new String[] { binding1, binding2 });
-       }
-
-       public String extractDestinationPathFromSourceFile(CompilationResult result) {
-               ICompilationUnit compilationUnit = result.compilationUnit;
-               if (compilationUnit != null) {
-                       char[] fileName = compilationUnit.getFileName();
-                       int lastIndex = CharOperation.lastIndexOf(java.io.File.separatorChar, fileName);
-                       if (lastIndex == -1) {
-                               return System.getProperty("user.dir"); //$NON-NLS-1$
-                       }
-                       return new String(CharOperation.subarray(fileName, 0, lastIndex));
-               }
-               return System.getProperty("user.dir"); //$NON-NLS-1$
-       }
-
-}
\ No newline at end of file