Tue, 16 Jun 2009 10:46:37 +0100
6638712: Inference with wildcard types causes selection of inapplicable method
Summary: Added global sanity check in order to make sure that return type inference does not violate bounds constraints
Reviewed-by: jjg
duke@1 | 1 | /* |
xdono@117 | 2 | * Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved. |
duke@1 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@1 | 4 | * |
duke@1 | 5 | * This code is free software; you can redistribute it and/or modify it |
duke@1 | 6 | * under the terms of the GNU General Public License version 2 only, as |
duke@1 | 7 | * published by the Free Software Foundation. Sun designates this |
duke@1 | 8 | * particular file as subject to the "Classpath" exception as provided |
duke@1 | 9 | * by Sun in the LICENSE file that accompanied this code. |
duke@1 | 10 | * |
duke@1 | 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
duke@1 | 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@1 | 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@1 | 14 | * version 2 for more details (a copy is included in the LICENSE file that |
duke@1 | 15 | * accompanied this code). |
duke@1 | 16 | * |
duke@1 | 17 | * You should have received a copy of the GNU General Public License version |
duke@1 | 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
duke@1 | 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@1 | 20 | * |
duke@1 | 21 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
duke@1 | 22 | * CA 95054 USA or visit www.sun.com if you need additional information or |
duke@1 | 23 | * have any questions. |
duke@1 | 24 | */ |
duke@1 | 25 | |
duke@1 | 26 | package com.sun.tools.javac.sym; |
duke@1 | 27 | |
duke@1 | 28 | import com.sun.tools.javac.api.JavacTaskImpl; |
duke@1 | 29 | import com.sun.tools.javac.code.Kinds; |
duke@1 | 30 | import com.sun.tools.javac.code.Scope; |
duke@1 | 31 | import com.sun.tools.javac.code.Symbol.*; |
duke@1 | 32 | import com.sun.tools.javac.code.Symbol; |
duke@1 | 33 | import com.sun.tools.javac.code.Attribute; |
duke@1 | 34 | import com.sun.tools.javac.code.Symtab; |
duke@1 | 35 | import com.sun.tools.javac.code.Type; |
duke@1 | 36 | import com.sun.tools.javac.jvm.ClassReader; |
duke@1 | 37 | import com.sun.tools.javac.jvm.ClassWriter; |
duke@1 | 38 | import com.sun.tools.javac.jvm.Pool; |
duke@1 | 39 | import com.sun.tools.javac.processing.JavacProcessingEnvironment; |
duke@1 | 40 | import com.sun.tools.javac.util.List; |
duke@1 | 41 | import com.sun.tools.javac.util.Pair; |
duke@1 | 42 | |
duke@1 | 43 | import java.io.File; |
duke@1 | 44 | import java.io.IOException; |
duke@1 | 45 | import java.util.ArrayList; |
duke@1 | 46 | import java.util.EnumSet; |
duke@1 | 47 | import java.util.Enumeration; |
duke@1 | 48 | import java.util.HashSet; |
duke@1 | 49 | import java.util.ResourceBundle; |
duke@1 | 50 | import java.util.Set; |
duke@1 | 51 | |
duke@1 | 52 | import javax.annotation.processing.AbstractProcessor; |
duke@1 | 53 | import javax.annotation.processing.RoundEnvironment; |
duke@1 | 54 | import javax.annotation.processing.SupportedAnnotationTypes; |
duke@1 | 55 | import javax.annotation.processing.SupportedOptions; |
duke@1 | 56 | import javax.lang.model.SourceVersion; |
duke@1 | 57 | import javax.lang.model.element.ElementKind; |
duke@1 | 58 | import javax.lang.model.element.TypeElement; |
duke@1 | 59 | import javax.tools.Diagnostic; |
duke@1 | 60 | import javax.tools.JavaCompiler; |
duke@1 | 61 | import javax.tools.JavaFileManager.Location; |
duke@1 | 62 | import javax.tools.JavaFileObject; |
duke@1 | 63 | import static javax.tools.JavaFileObject.Kind.CLASS; |
duke@1 | 64 | import javax.tools.StandardJavaFileManager; |
duke@1 | 65 | import javax.tools.StandardLocation; |
duke@1 | 66 | import javax.tools.ToolProvider; |
duke@1 | 67 | |
duke@1 | 68 | /** |
duke@1 | 69 | * Used to generate a "symbol file" representing rt.jar that only |
duke@1 | 70 | * includes supported or legacy proprietary API. Valid annotation |
duke@1 | 71 | * processor options: |
duke@1 | 72 | * |
duke@1 | 73 | * <dl> |
duke@1 | 74 | * <dt>com.sun.tools.javac.sym.Jar</dt> |
duke@1 | 75 | * <dd>Specifies the location of rt.jar.</dd> |
duke@1 | 76 | * <dt>com.sun.tools.javac.sym.Dest</dt> |
duke@1 | 77 | * <dd>Specifies the destination directory.</dd> |
duke@1 | 78 | * </dl> |
duke@1 | 79 | * |
duke@1 | 80 | * <p><b>This is NOT part of any API supported by Sun Microsystems. |
duke@1 | 81 | * If you write code that depends on this, you do so at your own |
duke@1 | 82 | * risk. This code and its internal interfaces are subject to change |
duke@1 | 83 | * or deletion without notice.</b></p> |
duke@1 | 84 | * |
duke@1 | 85 | * @author Peter von der Ah\u00e9 |
duke@1 | 86 | */ |
duke@1 | 87 | @SupportedOptions({"com.sun.tools.javac.sym.Jar","com.sun.tools.javac.sym.Dest"}) |
duke@1 | 88 | @SupportedAnnotationTypes("*") |
duke@1 | 89 | public class CreateSymbols extends AbstractProcessor { |
duke@1 | 90 | |
duke@1 | 91 | static Set<String> getLegacyPackages() { |
duke@1 | 92 | ResourceBundle legacyBundle |
duke@1 | 93 | = ResourceBundle.getBundle("com.sun.tools.javac.resources.legacy"); |
duke@1 | 94 | Set<String> keys = new HashSet<String>(); |
duke@1 | 95 | for (Enumeration<String> e = legacyBundle.getKeys(); e.hasMoreElements(); ) |
duke@1 | 96 | keys.add(e.nextElement()); |
duke@1 | 97 | return keys; |
duke@1 | 98 | } |
duke@1 | 99 | |
duke@1 | 100 | public boolean process(Set<? extends TypeElement> tes, RoundEnvironment renv) { |
duke@1 | 101 | try { |
duke@1 | 102 | if (renv.processingOver()) |
duke@1 | 103 | createSymbols(); |
duke@1 | 104 | } catch (IOException e) { |
duke@1 | 105 | processingEnv.getMessager() |
duke@1 | 106 | .printMessage(Diagnostic.Kind.ERROR, e.getLocalizedMessage()); |
duke@1 | 107 | } catch (Throwable t) { |
duke@1 | 108 | Throwable cause = t.getCause(); |
duke@1 | 109 | if (cause == null) |
duke@1 | 110 | cause = t; |
duke@1 | 111 | processingEnv.getMessager() |
duke@1 | 112 | .printMessage(Diagnostic.Kind.ERROR, cause.getLocalizedMessage()); |
duke@1 | 113 | } |
duke@1 | 114 | return true; |
duke@1 | 115 | } |
duke@1 | 116 | |
duke@1 | 117 | void createSymbols() throws IOException { |
duke@1 | 118 | Set<String> legacy = getLegacyPackages(); |
duke@1 | 119 | Set<String> legacyProprietary = getLegacyPackages(); |
duke@1 | 120 | Set<String> documented = new HashSet<String>(); |
duke@1 | 121 | Set<PackageSymbol> packages = |
duke@1 | 122 | ((JavacProcessingEnvironment)processingEnv).getSpecifiedPackages(); |
duke@1 | 123 | String jarName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Jar"); |
duke@1 | 124 | if (jarName == null) |
duke@1 | 125 | throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Jar=LOCATION_OF_JAR"); |
duke@1 | 126 | String destName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Dest"); |
duke@1 | 127 | if (destName == null) |
duke@1 | 128 | throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Dest=LOCATION_OF_JAR"); |
duke@1 | 129 | |
duke@1 | 130 | for (PackageSymbol psym : packages) { |
duke@1 | 131 | String name = psym.getQualifiedName().toString(); |
duke@1 | 132 | legacyProprietary.remove(name); |
duke@1 | 133 | documented.add(name); |
duke@1 | 134 | } |
duke@1 | 135 | |
duke@1 | 136 | JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); |
duke@1 | 137 | StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null); |
duke@1 | 138 | Location jarLocation = StandardLocation.locationFor(jarName); |
duke@1 | 139 | File jarFile = new File(jarName); |
duke@1 | 140 | fm.setLocation(jarLocation, List.of(jarFile)); |
duke@1 | 141 | fm.setLocation(StandardLocation.CLASS_PATH, List.<File>nil()); |
duke@1 | 142 | fm.setLocation(StandardLocation.SOURCE_PATH, List.<File>nil()); |
duke@1 | 143 | { |
duke@1 | 144 | ArrayList<File> bootClassPath = new ArrayList<File>(); |
duke@1 | 145 | bootClassPath.add(jarFile); |
duke@1 | 146 | for (File path : fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH)) { |
duke@1 | 147 | if (!new File(path.getName()).equals(new File("rt.jar"))) |
duke@1 | 148 | bootClassPath.add(path); |
duke@1 | 149 | } |
duke@1 | 150 | System.err.println("Using boot class path = " + bootClassPath); |
duke@1 | 151 | fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootClassPath); |
duke@1 | 152 | } |
duke@1 | 153 | // System.out.println(fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH)); |
duke@1 | 154 | File destDir = new File(destName); |
duke@1 | 155 | if (!destDir.exists()) |
duke@1 | 156 | if (!destDir.mkdirs()) |
duke@1 | 157 | throw new RuntimeException("Could not create " + destDir); |
duke@1 | 158 | fm.setLocation(StandardLocation.CLASS_OUTPUT, List.of(destDir)); |
duke@1 | 159 | Set<String> hiddenPackages = new HashSet<String>(); |
duke@1 | 160 | Set<String> crisp = new HashSet<String>(); |
duke@1 | 161 | List<String> options = List.of("-XDdev"); |
duke@1 | 162 | // options = options.prepend("-doe"); |
duke@1 | 163 | // options = options.prepend("-verbose"); |
duke@1 | 164 | JavacTaskImpl task = (JavacTaskImpl) |
duke@1 | 165 | tool.getTask(null, fm, null, options, null, null); |
duke@1 | 166 | com.sun.tools.javac.main.JavaCompiler compiler = |
duke@1 | 167 | com.sun.tools.javac.main.JavaCompiler.instance(task.getContext()); |
duke@1 | 168 | ClassReader reader = ClassReader.instance(task.getContext()); |
duke@1 | 169 | ClassWriter writer = ClassWriter.instance(task.getContext()); |
duke@1 | 170 | Symtab syms = Symtab.instance(task.getContext()); |
duke@1 | 171 | Attribute.Compound proprietary = |
duke@1 | 172 | new Attribute.Compound(syms.proprietaryType, |
duke@1 | 173 | List.<Pair<Symbol.MethodSymbol,Attribute>>nil()); |
duke@1 | 174 | |
duke@1 | 175 | Type.moreInfo = true; |
duke@1 | 176 | Pool pool = new Pool(); |
duke@1 | 177 | for (JavaFileObject file : fm.list(jarLocation, "", EnumSet.of(CLASS), true)) { |
duke@1 | 178 | String className = fm.inferBinaryName(jarLocation, file); |
duke@1 | 179 | int index = className.lastIndexOf('.'); |
duke@1 | 180 | String pckName = index == -1 ? "" : className.substring(0, index); |
duke@1 | 181 | boolean addLegacyAnnotation = false; |
duke@1 | 182 | if (documented.contains(pckName)) { |
duke@1 | 183 | if (!legacy.contains(pckName)) |
duke@1 | 184 | crisp.add(pckName); |
duke@1 | 185 | // System.out.println("Documented: " + className); |
duke@1 | 186 | } else if (legacyProprietary.contains(pckName)) { |
duke@1 | 187 | addLegacyAnnotation = true; |
duke@1 | 188 | // System.out.println("Legacy proprietary: " + className); |
duke@1 | 189 | } else { |
duke@1 | 190 | // System.out.println("Hidden " + className); |
duke@1 | 191 | hiddenPackages.add(pckName); |
duke@1 | 192 | continue; |
duke@1 | 193 | } |
duke@1 | 194 | TypeSymbol sym = (TypeSymbol)compiler.resolveIdent(className); |
duke@1 | 195 | if (sym.kind != Kinds.TYP) { |
duke@1 | 196 | if (className.indexOf('$') < 0) { |
duke@1 | 197 | System.err.println("Ignoring (other) " + className + " : " + sym); |
duke@1 | 198 | System.err.println(" " + sym.getClass().getSimpleName() + " " + sym.type); |
duke@1 | 199 | } |
duke@1 | 200 | continue; |
duke@1 | 201 | } |
duke@1 | 202 | sym.complete(); |
duke@1 | 203 | if (sym.getEnclosingElement().getKind() != ElementKind.PACKAGE) { |
duke@1 | 204 | System.err.println("Ignoring (bad) " + sym.getQualifiedName()); |
duke@1 | 205 | continue; |
duke@1 | 206 | } |
duke@1 | 207 | ClassSymbol cs = (ClassSymbol) sym; |
duke@1 | 208 | if (addLegacyAnnotation) { |
duke@1 | 209 | cs.attributes_field = (cs.attributes_field == null) |
duke@1 | 210 | ? List.of(proprietary) |
duke@1 | 211 | : cs.attributes_field.prepend(proprietary); |
duke@1 | 212 | } |
duke@1 | 213 | writeClass(pool, cs, writer); |
duke@1 | 214 | } |
duke@1 | 215 | |
duke@1 | 216 | if (false) { |
duke@1 | 217 | for (String pckName : crisp) |
duke@1 | 218 | System.out.println("Crisp: " + pckName); |
duke@1 | 219 | for (String pckName : hiddenPackages) |
duke@1 | 220 | System.out.println("Hidden: " + pckName); |
duke@1 | 221 | for (String pckName : legacyProprietary) |
duke@1 | 222 | System.out.println("Legacy proprietary: " + pckName); |
duke@1 | 223 | for (String pckName : documented) |
duke@1 | 224 | System.out.println("Documented: " + pckName); |
duke@1 | 225 | } |
duke@1 | 226 | } |
duke@1 | 227 | |
duke@1 | 228 | void writeClass(final Pool pool, final ClassSymbol cs, final ClassWriter writer) |
duke@1 | 229 | throws IOException |
duke@1 | 230 | { |
duke@1 | 231 | try { |
duke@1 | 232 | pool.reset(); |
duke@1 | 233 | cs.pool = pool; |
duke@1 | 234 | writer.writeClass(cs); |
duke@1 | 235 | for (Scope.Entry e = cs.members().elems; e != null; e = e.sibling) { |
duke@1 | 236 | if (e.sym.kind == Kinds.TYP) { |
duke@1 | 237 | ClassSymbol nestedClass = (ClassSymbol)e.sym; |
duke@1 | 238 | nestedClass.complete(); |
duke@1 | 239 | writeClass(pool, nestedClass, writer); |
duke@1 | 240 | } |
duke@1 | 241 | } |
duke@1 | 242 | } catch (ClassWriter.StringOverflow ex) { |
duke@1 | 243 | throw new RuntimeException(ex); |
duke@1 | 244 | } catch (ClassWriter.PoolOverflow ex) { |
duke@1 | 245 | throw new RuntimeException(ex); |
duke@1 | 246 | } |
duke@1 | 247 | } |
duke@1 | 248 | |
duke@1 | 249 | public SourceVersion getSupportedSourceVersion() { |
duke@1 | 250 | return SourceVersion.latest(); |
duke@1 | 251 | } |
duke@1 | 252 | |
duke@1 | 253 | // used for debugging |
duke@1 | 254 | public static void main(String... args) { |
duke@1 | 255 | String rt_jar = args[0]; |
duke@1 | 256 | String dest = args[1]; |
duke@1 | 257 | args = new String[] { |
duke@1 | 258 | "-Xbootclasspath:" + rt_jar, |
duke@1 | 259 | "-XDprocess.packages", |
duke@1 | 260 | "-proc:only", |
duke@1 | 261 | "-processor", |
duke@1 | 262 | "com.sun.tools.javac.sym.CreateSymbols", |
duke@1 | 263 | "-Acom.sun.tools.javac.sym.Jar=" + rt_jar, |
duke@1 | 264 | "-Acom.sun.tools.javac.sym.Dest=" + dest, |
duke@1 | 265 | // <editor-fold defaultstate="collapsed"> |
duke@1 | 266 | "java.applet", |
duke@1 | 267 | "java.awt", |
duke@1 | 268 | "java.awt.color", |
duke@1 | 269 | "java.awt.datatransfer", |
duke@1 | 270 | "java.awt.dnd", |
duke@1 | 271 | "java.awt.event", |
duke@1 | 272 | "java.awt.font", |
duke@1 | 273 | "java.awt.geom", |
duke@1 | 274 | "java.awt.im", |
duke@1 | 275 | "java.awt.im.spi", |
duke@1 | 276 | "java.awt.image", |
duke@1 | 277 | "java.awt.image.renderable", |
duke@1 | 278 | "java.awt.print", |
duke@1 | 279 | "java.beans", |
duke@1 | 280 | "java.beans.beancontext", |
duke@1 | 281 | "java.io", |
duke@1 | 282 | "java.lang", |
duke@1 | 283 | "java.lang.annotation", |
duke@1 | 284 | "java.lang.instrument", |
duke@1 | 285 | "java.lang.management", |
duke@1 | 286 | "java.lang.ref", |
duke@1 | 287 | "java.lang.reflect", |
duke@1 | 288 | "java.math", |
duke@1 | 289 | "java.net", |
duke@1 | 290 | "java.nio", |
duke@1 | 291 | "java.nio.channels", |
duke@1 | 292 | "java.nio.channels.spi", |
duke@1 | 293 | "java.nio.charset", |
duke@1 | 294 | "java.nio.charset.spi", |
duke@1 | 295 | "java.rmi", |
duke@1 | 296 | "java.rmi.activation", |
duke@1 | 297 | "java.rmi.dgc", |
duke@1 | 298 | "java.rmi.registry", |
duke@1 | 299 | "java.rmi.server", |
duke@1 | 300 | "java.security", |
duke@1 | 301 | "java.security.acl", |
duke@1 | 302 | "java.security.cert", |
duke@1 | 303 | "java.security.interfaces", |
duke@1 | 304 | "java.security.spec", |
duke@1 | 305 | "java.sql", |
duke@1 | 306 | "java.text", |
duke@1 | 307 | "java.text.spi", |
duke@1 | 308 | "java.util", |
duke@1 | 309 | "java.util.concurrent", |
duke@1 | 310 | "java.util.concurrent.atomic", |
duke@1 | 311 | "java.util.concurrent.locks", |
duke@1 | 312 | "java.util.jar", |
duke@1 | 313 | "java.util.logging", |
duke@1 | 314 | "java.util.prefs", |
duke@1 | 315 | "java.util.regex", |
duke@1 | 316 | "java.util.spi", |
duke@1 | 317 | "java.util.zip", |
duke@1 | 318 | "javax.accessibility", |
duke@1 | 319 | "javax.activation", |
duke@1 | 320 | "javax.activity", |
duke@1 | 321 | "javax.annotation", |
duke@1 | 322 | "javax.annotation.processing", |
duke@1 | 323 | "javax.crypto", |
duke@1 | 324 | "javax.crypto.interfaces", |
duke@1 | 325 | "javax.crypto.spec", |
duke@1 | 326 | "javax.imageio", |
duke@1 | 327 | "javax.imageio.event", |
duke@1 | 328 | "javax.imageio.metadata", |
duke@1 | 329 | "javax.imageio.plugins.jpeg", |
duke@1 | 330 | "javax.imageio.plugins.bmp", |
duke@1 | 331 | "javax.imageio.spi", |
duke@1 | 332 | "javax.imageio.stream", |
duke@1 | 333 | "javax.jws", |
duke@1 | 334 | "javax.jws.soap", |
duke@1 | 335 | "javax.lang.model", |
duke@1 | 336 | "javax.lang.model.element", |
duke@1 | 337 | "javax.lang.model.type", |
duke@1 | 338 | "javax.lang.model.util", |
duke@1 | 339 | "javax.management", |
duke@1 | 340 | "javax.management.loading", |
duke@1 | 341 | "javax.management.monitor", |
duke@1 | 342 | "javax.management.relation", |
duke@1 | 343 | "javax.management.openmbean", |
duke@1 | 344 | "javax.management.timer", |
duke@1 | 345 | "javax.management.modelmbean", |
duke@1 | 346 | "javax.management.remote", |
duke@1 | 347 | "javax.management.remote.rmi", |
duke@1 | 348 | "javax.naming", |
duke@1 | 349 | "javax.naming.directory", |
duke@1 | 350 | "javax.naming.event", |
duke@1 | 351 | "javax.naming.ldap", |
duke@1 | 352 | "javax.naming.spi", |
duke@1 | 353 | "javax.net", |
duke@1 | 354 | "javax.net.ssl", |
duke@1 | 355 | "javax.print", |
duke@1 | 356 | "javax.print.attribute", |
duke@1 | 357 | "javax.print.attribute.standard", |
duke@1 | 358 | "javax.print.event", |
duke@1 | 359 | "javax.rmi", |
duke@1 | 360 | "javax.rmi.CORBA", |
duke@1 | 361 | "javax.rmi.ssl", |
duke@1 | 362 | "javax.script", |
duke@1 | 363 | "javax.security.auth", |
duke@1 | 364 | "javax.security.auth.callback", |
duke@1 | 365 | "javax.security.auth.kerberos", |
duke@1 | 366 | "javax.security.auth.login", |
duke@1 | 367 | "javax.security.auth.spi", |
duke@1 | 368 | "javax.security.auth.x500", |
duke@1 | 369 | "javax.security.cert", |
duke@1 | 370 | "javax.security.sasl", |
duke@1 | 371 | "javax.sound.sampled", |
duke@1 | 372 | "javax.sound.sampled.spi", |
duke@1 | 373 | "javax.sound.midi", |
duke@1 | 374 | "javax.sound.midi.spi", |
duke@1 | 375 | "javax.sql", |
duke@1 | 376 | "javax.sql.rowset", |
duke@1 | 377 | "javax.sql.rowset.serial", |
duke@1 | 378 | "javax.sql.rowset.spi", |
duke@1 | 379 | "javax.swing", |
duke@1 | 380 | "javax.swing.border", |
duke@1 | 381 | "javax.swing.colorchooser", |
duke@1 | 382 | "javax.swing.filechooser", |
duke@1 | 383 | "javax.swing.event", |
duke@1 | 384 | "javax.swing.table", |
duke@1 | 385 | "javax.swing.text", |
duke@1 | 386 | "javax.swing.text.html", |
duke@1 | 387 | "javax.swing.text.html.parser", |
duke@1 | 388 | "javax.swing.text.rtf", |
duke@1 | 389 | "javax.swing.tree", |
duke@1 | 390 | "javax.swing.undo", |
duke@1 | 391 | "javax.swing.plaf", |
duke@1 | 392 | "javax.swing.plaf.basic", |
duke@1 | 393 | "javax.swing.plaf.metal", |
duke@1 | 394 | "javax.swing.plaf.multi", |
duke@1 | 395 | "javax.swing.plaf.synth", |
duke@1 | 396 | "javax.tools", |
duke@1 | 397 | "javax.transaction", |
duke@1 | 398 | "javax.transaction.xa", |
duke@1 | 399 | "javax.xml.parsers", |
duke@1 | 400 | "javax.xml.bind", |
duke@1 | 401 | "javax.xml.bind.annotation", |
duke@1 | 402 | "javax.xml.bind.annotation.adapters", |
duke@1 | 403 | "javax.xml.bind.attachment", |
duke@1 | 404 | "javax.xml.bind.helpers", |
duke@1 | 405 | "javax.xml.bind.util", |
duke@1 | 406 | "javax.xml.soap", |
duke@1 | 407 | "javax.xml.ws", |
duke@1 | 408 | "javax.xml.ws.handler", |
duke@1 | 409 | "javax.xml.ws.handler.soap", |
duke@1 | 410 | "javax.xml.ws.http", |
duke@1 | 411 | "javax.xml.ws.soap", |
duke@1 | 412 | "javax.xml.ws.spi", |
duke@1 | 413 | "javax.xml.transform", |
duke@1 | 414 | "javax.xml.transform.sax", |
duke@1 | 415 | "javax.xml.transform.dom", |
duke@1 | 416 | "javax.xml.transform.stax", |
duke@1 | 417 | "javax.xml.transform.stream", |
duke@1 | 418 | "javax.xml", |
duke@1 | 419 | "javax.xml.crypto", |
duke@1 | 420 | "javax.xml.crypto.dom", |
duke@1 | 421 | "javax.xml.crypto.dsig", |
duke@1 | 422 | "javax.xml.crypto.dsig.dom", |
duke@1 | 423 | "javax.xml.crypto.dsig.keyinfo", |
duke@1 | 424 | "javax.xml.crypto.dsig.spec", |
duke@1 | 425 | "javax.xml.datatype", |
duke@1 | 426 | "javax.xml.validation", |
duke@1 | 427 | "javax.xml.namespace", |
duke@1 | 428 | "javax.xml.xpath", |
duke@1 | 429 | "javax.xml.stream", |
duke@1 | 430 | "javax.xml.stream.events", |
duke@1 | 431 | "javax.xml.stream.util", |
duke@1 | 432 | "org.ietf.jgss", |
duke@1 | 433 | "org.omg.CORBA", |
duke@1 | 434 | "org.omg.CORBA.DynAnyPackage", |
duke@1 | 435 | "org.omg.CORBA.ORBPackage", |
duke@1 | 436 | "org.omg.CORBA.TypeCodePackage", |
duke@1 | 437 | "org.omg.stub.java.rmi", |
duke@1 | 438 | "org.omg.CORBA.portable", |
duke@1 | 439 | "org.omg.CORBA_2_3", |
duke@1 | 440 | "org.omg.CORBA_2_3.portable", |
duke@1 | 441 | "org.omg.CosNaming", |
duke@1 | 442 | "org.omg.CosNaming.NamingContextExtPackage", |
duke@1 | 443 | "org.omg.CosNaming.NamingContextPackage", |
duke@1 | 444 | "org.omg.SendingContext", |
duke@1 | 445 | "org.omg.PortableServer", |
duke@1 | 446 | "org.omg.PortableServer.CurrentPackage", |
duke@1 | 447 | "org.omg.PortableServer.POAPackage", |
duke@1 | 448 | "org.omg.PortableServer.POAManagerPackage", |
duke@1 | 449 | "org.omg.PortableServer.ServantLocatorPackage", |
duke@1 | 450 | "org.omg.PortableServer.portable", |
duke@1 | 451 | "org.omg.PortableInterceptor", |
duke@1 | 452 | "org.omg.PortableInterceptor.ORBInitInfoPackage", |
duke@1 | 453 | "org.omg.Messaging", |
duke@1 | 454 | "org.omg.IOP", |
duke@1 | 455 | "org.omg.IOP.CodecFactoryPackage", |
duke@1 | 456 | "org.omg.IOP.CodecPackage", |
duke@1 | 457 | "org.omg.Dynamic", |
duke@1 | 458 | "org.omg.DynamicAny", |
duke@1 | 459 | "org.omg.DynamicAny.DynAnyPackage", |
duke@1 | 460 | "org.omg.DynamicAny.DynAnyFactoryPackage", |
duke@1 | 461 | "org.w3c.dom", |
duke@1 | 462 | "org.w3c.dom.events", |
duke@1 | 463 | "org.w3c.dom.bootstrap", |
duke@1 | 464 | "org.w3c.dom.ls", |
duke@1 | 465 | "org.xml.sax", |
duke@1 | 466 | "org.xml.sax.ext", |
duke@1 | 467 | "org.xml.sax.helpers", |
duke@1 | 468 | "com.sun.java.browser.dom", |
duke@1 | 469 | "org.w3c.dom", |
duke@1 | 470 | "org.w3c.dom.bootstrap", |
duke@1 | 471 | "org.w3c.dom.ls", |
duke@1 | 472 | "org.w3c.dom.ranges", |
duke@1 | 473 | "org.w3c.dom.traversal", |
duke@1 | 474 | "org.w3c.dom.html", |
duke@1 | 475 | "org.w3c.dom.stylesheets", |
duke@1 | 476 | "org.w3c.dom.css", |
duke@1 | 477 | "org.w3c.dom.events", |
duke@1 | 478 | "org.w3c.dom.views", |
duke@1 | 479 | "com.sun.management", |
duke@1 | 480 | "com.sun.security.auth", |
duke@1 | 481 | "com.sun.security.auth.callback", |
duke@1 | 482 | "com.sun.security.auth.login", |
duke@1 | 483 | "com.sun.security.auth.module", |
duke@1 | 484 | "com.sun.security.jgss", |
duke@1 | 485 | "com.sun.net.httpserver", |
duke@1 | 486 | "com.sun.net.httpserver.spi", |
duke@1 | 487 | "javax.smartcardio" |
duke@1 | 488 | // </editor-fold> |
duke@1 | 489 | }; |
duke@1 | 490 | com.sun.tools.javac.Main.compile(args); |
duke@1 | 491 | } |
duke@1 | 492 | |
duke@1 | 493 | } |