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 }