src/share/classes/com/sun/tools/javac/api/JavacTool.java

changeset 1157
3809292620c9
parent 1136
ae361e7f435a
child 1358
fc123bdeddb8
     1.1 --- a/src/share/classes/com/sun/tools/javac/api/JavacTool.java	Mon Dec 12 08:15:32 2011 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTool.java	Tue Dec 13 11:21:28 2011 -0800
     1.3 @@ -25,18 +25,15 @@
     1.4  
     1.5  package com.sun.tools.javac.api;
     1.6  
     1.7 -import java.io.File;
     1.8  import java.io.InputStream;
     1.9  import java.io.OutputStream;
    1.10  import java.io.OutputStreamWriter;
    1.11  import java.io.PrintWriter;
    1.12  import java.io.Writer;
    1.13  import java.nio.charset.Charset;
    1.14 -import java.util.ArrayList;
    1.15  import java.util.Collections;
    1.16  import java.util.EnumSet;
    1.17  import java.util.Iterator;
    1.18 -import java.util.List;
    1.19  import java.util.Locale;
    1.20  import java.util.Set;
    1.21  import javax.lang.model.SourceVersion;
    1.22 @@ -44,17 +41,15 @@
    1.23  
    1.24  import com.sun.source.util.JavacTask;
    1.25  import com.sun.tools.javac.file.JavacFileManager;
    1.26 -import com.sun.tools.javac.main.JavacOption.OptionKind;
    1.27 -import com.sun.tools.javac.main.JavacOption;
    1.28  import com.sun.tools.javac.main.Main;
    1.29 -import com.sun.tools.javac.main.RecognizedOptions.GrumpyHelper;
    1.30 -import com.sun.tools.javac.main.RecognizedOptions;
    1.31 +import com.sun.tools.javac.main.Option;
    1.32 +import com.sun.tools.javac.main.OptionHelper;
    1.33 +import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
    1.34  import com.sun.tools.javac.util.ClientCodeException;
    1.35  import com.sun.tools.javac.util.Context;
    1.36  import com.sun.tools.javac.util.Log;
    1.37  import com.sun.tools.javac.util.Log.PrefixKind;
    1.38  import com.sun.tools.javac.util.Options;
    1.39 -import com.sun.tools.javac.util.Pair;
    1.40  
    1.41  /**
    1.42   * TODO: describe com.sun.tools.javac.api.Tool
    1.43 @@ -67,23 +62,10 @@
    1.44   * @author Peter von der Ah\u00e9
    1.45   */
    1.46  public final class JavacTool implements JavaCompiler {
    1.47 -    private final List<Pair<String,String>> options
    1.48 -        = new ArrayList<Pair<String,String>>();
    1.49 -    private final Context dummyContext = new Context();
    1.50 -
    1.51 -    private final PrintWriter silent = new PrintWriter(new OutputStream(){
    1.52 -        public void write(int b) {}
    1.53 -    });
    1.54 -
    1.55 -    private final Main sharedCompiler = new Main("javac", silent);
    1.56 -    {
    1.57 -        sharedCompiler.setOptions(Options.instance(dummyContext));
    1.58 -    }
    1.59 -
    1.60      /**
    1.61 -     * Constructor used by service provider mechanism.  The correct way to
    1.62 -     * obtain an instance of this class is using create or the service provider
    1.63 -     * mechanism.
    1.64 +     * Constructor used by service provider mechanism.  The recommended way to
    1.65 +     * obtain an instance of this class is by using {@link #create} or the
    1.66 +     * service provider mechanism.
    1.67       * @see javax.tools.JavaCompilerTool
    1.68       * @see javax.tools.ToolProvider
    1.69       * @see #create
    1.70 @@ -99,49 +81,6 @@
    1.71          return new JavacTool();
    1.72      }
    1.73  
    1.74 -    private String argsToString(Object... args) {
    1.75 -        String newArgs = null;
    1.76 -        if (args.length > 0) {
    1.77 -            StringBuilder sb = new StringBuilder();
    1.78 -            String separator = "";
    1.79 -            for (Object arg : args) {
    1.80 -                sb.append(separator).append(arg.toString());
    1.81 -                separator = File.pathSeparator;
    1.82 -            }
    1.83 -            newArgs = sb.toString();
    1.84 -        }
    1.85 -        return newArgs;
    1.86 -    }
    1.87 -
    1.88 -    private void setOption1(String name, OptionKind kind, Object... args) {
    1.89 -        String arg = argsToString(args);
    1.90 -        JavacOption option = sharedCompiler.getOption(name);
    1.91 -        if (option == null || !match(kind, option.getKind()))
    1.92 -            throw new IllegalArgumentException(name);
    1.93 -        if ((args.length != 0) != option.hasArg())
    1.94 -            throw new IllegalArgumentException(name);
    1.95 -        if (option.hasArg()) {
    1.96 -            if (option.process(null, name, arg)) // FIXME
    1.97 -                throw new IllegalArgumentException(name);
    1.98 -        } else {
    1.99 -            if (option.process(null, name)) // FIXME
   1.100 -                throw new IllegalArgumentException(name);
   1.101 -        }
   1.102 -        options.add(new Pair<String,String>(name,arg));
   1.103 -    }
   1.104 -
   1.105 -    public void setOption(String name, Object... args) {
   1.106 -        setOption1(name, OptionKind.NORMAL, args);
   1.107 -    }
   1.108 -
   1.109 -    public void setExtendedOption(String name, Object... args)  {
   1.110 -        setOption1(name, OptionKind.EXTENDED, args);
   1.111 -    }
   1.112 -
   1.113 -    private static boolean match(OptionKind clientKind, OptionKind optionKind) {
   1.114 -        return (clientKind == (optionKind == OptionKind.HIDDEN ? OptionKind.EXTENDED : optionKind));
   1.115 -    }
   1.116 -
   1.117      public JavacFileManager getStandardFileManager(
   1.118          DiagnosticListener<? super JavaFileObject> diagnosticListener,
   1.119          Locale locale,
   1.120 @@ -209,7 +148,9 @@
   1.121              if (fileManager == null)
   1.122                  fileManager = getStandardFileManager(diagnosticListener, null, null);
   1.123              fileManager = ccw.wrap(fileManager);
   1.124 +
   1.125              context.put(JavaFileManager.class, fileManager);
   1.126 +
   1.127              processOptions(context, fileManager, options);
   1.128              Main compiler = new Main("javacTask", context.get(Log.outKey));
   1.129              return new JavacTaskImpl(compiler, options, context, classes, compilationUnits);
   1.130 @@ -225,11 +166,28 @@
   1.131          if (options == null)
   1.132              return;
   1.133  
   1.134 -        Options optionTable = Options.instance(context);
   1.135 +        final Options optionTable = Options.instance(context);
   1.136          Log log = Log.instance(context);
   1.137  
   1.138 -        JavacOption[] recognizedOptions =
   1.139 -            RecognizedOptions.getJavacToolOptions(new GrumpyHelper(log));
   1.140 +        Option[] recognizedOptions =
   1.141 +                Option.getJavacToolOptions().toArray(new Option[0]);
   1.142 +        OptionHelper optionHelper = new GrumpyHelper(log) {
   1.143 +            @Override
   1.144 +            public String get(Option option) {
   1.145 +                return optionTable.get(option.getText());
   1.146 +            }
   1.147 +
   1.148 +            @Override
   1.149 +            public void put(String name, String value) {
   1.150 +                optionTable.put(name, value);
   1.151 +            }
   1.152 +
   1.153 +            @Override
   1.154 +            public void remove(String name) {
   1.155 +                optionTable.remove(name);
   1.156 +            }
   1.157 +        };
   1.158 +
   1.159          Iterator<String> flags = options.iterator();
   1.160          while (flags.hasNext()) {
   1.161              String flag = flags.next();
   1.162 @@ -247,19 +205,19 @@
   1.163                  }
   1.164              }
   1.165  
   1.166 -            JavacOption option = recognizedOptions[j];
   1.167 +            Option option = recognizedOptions[j];
   1.168              if (option.hasArg()) {
   1.169                  if (!flags.hasNext()) {
   1.170                      String msg = log.localize(PrefixKind.JAVAC, "err.req.arg", flag);
   1.171                      throw new IllegalArgumentException(msg);
   1.172                  }
   1.173                  String operand = flags.next();
   1.174 -                if (option.process(optionTable, flag, operand))
   1.175 +                if (option.process(optionHelper, flag, operand))
   1.176                      // should not happen as the GrumpyHelper will throw exceptions
   1.177                      // in case of errors
   1.178                      throw new IllegalArgumentException(flag + " " + operand);
   1.179              } else {
   1.180 -                if (option.process(optionTable, flag))
   1.181 +                if (option.process(optionHelper, flag))
   1.182                      // should not happen as the GrumpyHelper will throw exceptions
   1.183                      // in case of errors
   1.184                      throw new IllegalArgumentException(flag);
   1.185 @@ -283,9 +241,8 @@
   1.186      }
   1.187  
   1.188      public int isSupportedOption(String option) {
   1.189 -        JavacOption[] recognizedOptions =
   1.190 -            RecognizedOptions.getJavacToolOptions(new GrumpyHelper(null));
   1.191 -        for (JavacOption o : recognizedOptions) {
   1.192 +        Set<Option> recognizedOptions = Option.getJavacToolOptions();
   1.193 +        for (Option o : recognizedOptions) {
   1.194              if (o.matches(option))
   1.195                  return o.hasArg() ? 1 : 0;
   1.196          }

mercurial