src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java

changeset 1406
2901c7b5339e
parent 1347
1408af4cd8b0
child 1416
c0f0c41cafa0
     1.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Tue Nov 13 08:06:00 2012 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Tue Nov 13 15:09:15 2012 -0800
     1.3 @@ -781,6 +781,8 @@
     1.4          final JavaCompiler compiler;
     1.5          /** The log for the round. */
     1.6          final Log log;
     1.7 +        /** The diagnostic handler for the round. */
     1.8 +        final Log.DeferredDiagnosticHandler deferredDiagnosticHandler;
     1.9  
    1.10          /** The ASTs to be compiled. */
    1.11          List<JCCompilationUnit> roots;
    1.12 @@ -798,7 +800,8 @@
    1.13          int nMessagerErrors;
    1.14  
    1.15          /** Create a round (common code). */
    1.16 -        private Round(Context context, int number, int priorErrors, int priorWarnings) {
    1.17 +        private Round(Context context, int number, int priorErrors, int priorWarnings,
    1.18 +                Log.DeferredDiagnosticHandler deferredDiagnosticHandler) {
    1.19              this.context = context;
    1.20              this.number = number;
    1.21  
    1.22 @@ -806,7 +809,12 @@
    1.23              log = Log.instance(context);
    1.24              log.nerrors = priorErrors;
    1.25              log.nwarnings += priorWarnings;
    1.26 -            log.deferAll();
    1.27 +            if (number == 1) {
    1.28 +                Assert.checkNonNull(deferredDiagnosticHandler);
    1.29 +                this.deferredDiagnosticHandler = deferredDiagnosticHandler;
    1.30 +            } else {
    1.31 +                this.deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log);
    1.32 +            }
    1.33  
    1.34              // the following is for the benefit of JavacProcessingEnvironment.getContext()
    1.35              JavacProcessingEnvironment.this.context = context;
    1.36 @@ -817,8 +825,9 @@
    1.37          }
    1.38  
    1.39          /** Create the first round. */
    1.40 -        Round(Context context, List<JCCompilationUnit> roots, List<ClassSymbol> classSymbols) {
    1.41 -            this(context, 1, 0, 0);
    1.42 +        Round(Context context, List<JCCompilationUnit> roots, List<ClassSymbol> classSymbols,
    1.43 +                Log.DeferredDiagnosticHandler deferredDiagnosticHandler) {
    1.44 +            this(context, 1, 0, 0, deferredDiagnosticHandler);
    1.45              this.roots = roots;
    1.46              genClassFiles = new HashMap<String,JavaFileObject>();
    1.47  
    1.48 @@ -841,7 +850,8 @@
    1.49              this(prev.nextContext(),
    1.50                      prev.number+1,
    1.51                      prev.nMessagerErrors,
    1.52 -                    prev.compiler.log.nwarnings);
    1.53 +                    prev.compiler.log.nwarnings,
    1.54 +                    null);
    1.55              this.genClassFiles = prev.genClassFiles;
    1.56  
    1.57              List<JCCompilationUnit> parsedFiles = compiler.parseFiles(newSourceFiles);
    1.58 @@ -912,7 +922,7 @@
    1.59              if (messager.errorRaised())
    1.60                  return true;
    1.61  
    1.62 -            for (JCDiagnostic d: log.deferredDiagnostics) {
    1.63 +            for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) {
    1.64                  switch (d.getKind()) {
    1.65                      case WARNING:
    1.66                          if (werror)
    1.67 @@ -1006,7 +1016,8 @@
    1.68                  // suppress errors, which are all presumed to be transient resolve errors
    1.69                  kinds.remove(JCDiagnostic.Kind.ERROR);
    1.70              }
    1.71 -            log.reportDeferredDiagnostics(kinds);
    1.72 +            deferredDiagnosticHandler.reportDeferredDiagnostics(kinds);
    1.73 +            log.popDiagnosticHandler(deferredDiagnosticHandler);
    1.74          }
    1.75  
    1.76          /** Print info about this round. */
    1.77 @@ -1112,7 +1123,8 @@
    1.78      public JavaCompiler doProcessing(Context context,
    1.79                                       List<JCCompilationUnit> roots,
    1.80                                       List<ClassSymbol> classSymbols,
    1.81 -                                     Iterable<? extends PackageSymbol> pckSymbols) {
    1.82 +                                     Iterable<? extends PackageSymbol> pckSymbols,
    1.83 +                                     Log.DeferredDiagnosticHandler deferredDiagnosticHandler) {
    1.84          log = Log.instance(context);
    1.85  
    1.86          Set<PackageSymbol> specifiedPackages = new LinkedHashSet<PackageSymbol>();
    1.87 @@ -1120,7 +1132,7 @@
    1.88              specifiedPackages.add(psym);
    1.89          this.specifiedPackages = Collections.unmodifiableSet(specifiedPackages);
    1.90  
    1.91 -        Round round = new Round(context, roots, classSymbols);
    1.92 +        Round round = new Round(context, roots, classSymbols, deferredDiagnosticHandler);
    1.93  
    1.94          boolean errorStatus;
    1.95          boolean moreToDo;

mercurial