24 */ |
24 */ |
25 |
25 |
26 package com.sun.tools.javac.main; |
26 package com.sun.tools.javac.main; |
27 |
27 |
28 import java.io.*; |
28 import java.io.*; |
|
29 import java.util.HashMap; |
29 import java.util.HashSet; |
30 import java.util.HashSet; |
30 import java.util.LinkedHashSet; |
31 import java.util.LinkedHashSet; |
31 import java.util.LinkedHashMap; |
32 import java.util.LinkedHashMap; |
32 import java.util.Map; |
33 import java.util.Map; |
33 import java.util.MissingResourceException; |
34 import java.util.MissingResourceException; |
|
35 import java.util.Queue; |
34 import java.util.ResourceBundle; |
36 import java.util.ResourceBundle; |
35 import java.util.Set; |
37 import java.util.Set; |
36 import java.util.logging.Handler; |
38 import java.util.logging.Handler; |
37 import java.util.logging.Level; |
39 import java.util.logging.Level; |
38 import java.util.logging.Logger; |
40 import java.util.logging.Logger; |
39 |
41 |
|
42 import javax.annotation.processing.Processor; |
|
43 import javax.lang.model.SourceVersion; |
40 import javax.tools.JavaFileManager; |
44 import javax.tools.JavaFileManager; |
41 import javax.tools.JavaFileObject; |
45 import javax.tools.JavaFileObject; |
42 import javax.tools.DiagnosticListener; |
46 import javax.tools.DiagnosticListener; |
43 |
47 |
44 import com.sun.tools.javac.file.JavacFileManager; |
|
45 import com.sun.source.util.TaskEvent; |
48 import com.sun.source.util.TaskEvent; |
46 import com.sun.source.util.TaskListener; |
49 import com.sun.source.util.TaskListener; |
47 |
50 |
|
51 import com.sun.tools.javac.file.JavacFileManager; |
48 import com.sun.tools.javac.util.*; |
52 import com.sun.tools.javac.util.*; |
49 import com.sun.tools.javac.code.*; |
53 import com.sun.tools.javac.code.*; |
|
54 import com.sun.tools.javac.code.Symbol.*; |
50 import com.sun.tools.javac.tree.*; |
55 import com.sun.tools.javac.tree.*; |
|
56 import com.sun.tools.javac.tree.JCTree.*; |
51 import com.sun.tools.javac.parser.*; |
57 import com.sun.tools.javac.parser.*; |
52 import com.sun.tools.javac.comp.*; |
58 import com.sun.tools.javac.comp.*; |
53 import com.sun.tools.javac.jvm.*; |
59 import com.sun.tools.javac.jvm.*; |
54 |
|
55 import com.sun.tools.javac.code.Symbol.*; |
|
56 import com.sun.tools.javac.tree.JCTree.*; |
|
57 |
|
58 import com.sun.tools.javac.processing.*; |
60 import com.sun.tools.javac.processing.*; |
59 import javax.annotation.processing.Processor; |
|
60 |
61 |
61 import static javax.tools.StandardLocation.CLASS_OUTPUT; |
62 import static javax.tools.StandardLocation.CLASS_OUTPUT; |
|
63 import static com.sun.tools.javac.main.OptionName.*; |
62 import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*; |
64 import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*; |
63 import static com.sun.tools.javac.util.ListBuffer.lb; |
65 import static com.sun.tools.javac.util.ListBuffer.lb; |
64 |
66 |
65 import java.util.HashMap; |
|
66 import java.util.Queue; |
|
67 import javax.lang.model.SourceVersion; |
|
68 |
67 |
69 /** This class could be the main entry point for GJC when GJC is used as a |
68 /** This class could be the main entry point for GJC when GJC is used as a |
70 * component in a larger software system. It provides operations to |
69 * component in a larger software system. It provides operations to |
71 * construct a new compiler, and to run a new compiler on a set of source |
70 * construct a new compiler, and to run a new compiler on a set of source |
72 * files. |
71 * files. |
354 |
353 |
355 reader.sourceCompleter = this; |
354 reader.sourceCompleter = this; |
356 |
355 |
357 Options options = Options.instance(context); |
356 Options options = Options.instance(context); |
358 |
357 |
359 verbose = options.get("-verbose") != null; |
358 verbose = options.isSet(VERBOSE); |
360 sourceOutput = options.get("-printsource") != null; // used to be -s |
359 sourceOutput = options.isSet(PRINTSOURCE); // used to be -s |
361 stubOutput = options.get("-stubs") != null; |
360 stubOutput = options.isSet("-stubs"); |
362 relax = options.get("-relax") != null; |
361 relax = options.isSet("-relax"); |
363 printFlat = options.get("-printflat") != null; |
362 printFlat = options.isSet("-printflat"); |
364 attrParseOnly = options.get("-attrparseonly") != null; |
363 attrParseOnly = options.isSet("-attrparseonly"); |
365 encoding = options.get("-encoding"); |
364 encoding = options.get(ENCODING); |
366 lineDebugInfo = options.get("-g:") == null || |
365 lineDebugInfo = options.isUnset(G_CUSTOM) || |
367 options.get("-g:lines") != null; |
366 options.isSet(G_CUSTOM, "lines"); |
368 genEndPos = options.get("-Xjcov") != null || |
367 genEndPos = options.isSet(XJCOV) || |
369 context.get(DiagnosticListener.class) != null; |
368 context.get(DiagnosticListener.class) != null; |
370 devVerbose = options.get("dev") != null; |
369 devVerbose = options.isSet("dev"); |
371 processPcks = options.get("process.packages") != null; |
370 processPcks = options.isSet("process.packages"); |
372 werror = options.get("-Werror") != null; |
371 werror = options.isSet(WERROR); |
373 |
372 |
374 verboseCompilePolicy = options.get("verboseCompilePolicy") != null; |
373 verboseCompilePolicy = options.isSet("verboseCompilePolicy"); |
375 |
374 |
376 if (attrParseOnly) |
375 if (attrParseOnly) |
377 compilePolicy = CompilePolicy.ATTR_ONLY; |
376 compilePolicy = CompilePolicy.ATTR_ONLY; |
378 else |
377 else |
379 compilePolicy = CompilePolicy.decode(options.get("compilePolicy")); |
378 compilePolicy = CompilePolicy.decode(options.get("compilePolicy")); |
380 |
379 |
381 implicitSourcePolicy = ImplicitSourcePolicy.decode(options.get("-implicit")); |
380 implicitSourcePolicy = ImplicitSourcePolicy.decode(options.get("-implicit")); |
382 |
381 |
383 completionFailureName = |
382 completionFailureName = |
384 (options.get("failcomplete") != null) |
383 options.isSet("failcomplete") |
385 ? names.fromString(options.get("failcomplete")) |
384 ? names.fromString(options.get("failcomplete")) |
386 : null; |
385 : null; |
387 |
386 |
388 shouldStopPolicy = |
387 shouldStopPolicy = |
389 (options.get("shouldStopPolicy") != null) |
388 options.isSet("shouldStopPolicy") |
390 ? CompileState.valueOf(options.get("shouldStopPolicy")) |
389 ? CompileState.valueOf(options.get("shouldStopPolicy")) |
391 : null; |
390 : null; |
392 if (options.get("oldDiags") == null) |
391 if (options.isUnset("oldDiags")) |
393 log.setDiagnosticFormatter(RichDiagnosticFormatter.instance(context)); |
392 log.setDiagnosticFormatter(RichDiagnosticFormatter.instance(context)); |
394 } |
393 } |
395 |
394 |
396 /* Switches: |
395 /* Switches: |
397 */ |
396 */ |
952 */ |
951 */ |
953 public void initProcessAnnotations(Iterable<? extends Processor> processors) { |
952 public void initProcessAnnotations(Iterable<? extends Processor> processors) { |
954 // Process annotations if processing is not disabled and there |
953 // Process annotations if processing is not disabled and there |
955 // is at least one Processor available. |
954 // is at least one Processor available. |
956 Options options = Options.instance(context); |
955 Options options = Options.instance(context); |
957 if (options.get("-proc:none") != null) { |
956 if (options.isSet(PROC, "none")) { |
958 processAnnotations = false; |
957 processAnnotations = false; |
959 } else if (procEnvImpl == null) { |
958 } else if (procEnvImpl == null) { |
960 procEnvImpl = new JavacProcessingEnvironment(context, processors); |
959 procEnvImpl = new JavacProcessingEnvironment(context, processors); |
961 processAnnotations = procEnvImpl.atLeastOneProcessor(); |
960 processAnnotations = procEnvImpl.atLeastOneProcessor(); |
962 |
961 |
1011 if (!processAnnotations) { |
1010 if (!processAnnotations) { |
1012 // If there are no annotation processors present, and |
1011 // If there are no annotation processors present, and |
1013 // annotation processing is to occur with compilation, |
1012 // annotation processing is to occur with compilation, |
1014 // emit a warning. |
1013 // emit a warning. |
1015 Options options = Options.instance(context); |
1014 Options options = Options.instance(context); |
1016 if (options.get("-proc:only") != null) { |
1015 if (options.isSet(PROC, "only")) { |
1017 log.warning("proc.proc-only.requested.no.procs"); |
1016 log.warning("proc.proc-only.requested.no.procs"); |
1018 todo.clear(); |
1017 todo.clear(); |
1019 } |
1018 } |
1020 // If not processing annotations, classnames must be empty |
1019 // If not processing annotations, classnames must be empty |
1021 if (!classnames.isEmpty()) { |
1020 if (!classnames.isEmpty()) { |
1099 |
1098 |
1100 boolean explicitAnnotationProcessingRequested() { |
1099 boolean explicitAnnotationProcessingRequested() { |
1101 Options options = Options.instance(context); |
1100 Options options = Options.instance(context); |
1102 return |
1101 return |
1103 explicitAnnotationProcessingRequested || |
1102 explicitAnnotationProcessingRequested || |
1104 options.get("-processor") != null || |
1103 options.isSet(PROCESSOR) || |
1105 options.get("-processorpath") != null || |
1104 options.isSet(PROCESSORPATH) || |
1106 options.get("-proc:only") != null || |
1105 options.isSet(PROC, "only") || |
1107 options.get("-Xprint") != null; |
1106 options.isSet(XPRINT); |
1108 } |
1107 } |
1109 |
1108 |
1110 /** |
1109 /** |
1111 * Attribute a list of parse trees, such as found on the "todo" list. |
1110 * Attribute a list of parse trees, such as found on the "todo" list. |
1112 * Note that attributing classes may cause additional files to be |
1111 * Note that attributing classes may cause additional files to be |