src/share/classes/com/sun/tools/javac/main/JavaCompiler.java

changeset 1406
2901c7b5339e
parent 1380
a65971893c50
child 1416
c0f0c41cafa0
     1.1 --- a/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Tue Nov 13 08:06:00 2012 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Tue Nov 13 15:09:15 2012 -0800
     1.3 @@ -1018,6 +1018,8 @@
     1.4       */
     1.5      boolean processAnnotations = false;
     1.6  
     1.7 +    Log.DeferredDiagnosticHandler deferredDiagnosticHandler;
     1.8 +
     1.9      /**
    1.10       * Object to handle annotation processing.
    1.11       */
    1.12 @@ -1048,7 +1050,7 @@
    1.13                  genEndPos = true;
    1.14                  if (!taskListener.isEmpty())
    1.15                      taskListener.started(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING));
    1.16 -                log.deferAll();
    1.17 +                deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log);
    1.18              } else { // free resources
    1.19                  procEnvImpl.close();
    1.20              }
    1.21 @@ -1079,7 +1081,8 @@
    1.22              // or other errors during enter which cannot be fixed by running
    1.23              // any annotation processors.
    1.24              if (unrecoverableError()) {
    1.25 -                log.reportDeferredDiagnostics();
    1.26 +                deferredDiagnosticHandler.reportDeferredDiagnostics();
    1.27 +                log.popDiagnosticHandler(deferredDiagnosticHandler);
    1.28                  return this;
    1.29              }
    1.30          }
    1.31 @@ -1102,10 +1105,12 @@
    1.32                  log.error("proc.no.explicit.annotation.processing.requested",
    1.33                            classnames);
    1.34              }
    1.35 -            log.reportDeferredDiagnostics();
    1.36 +            Assert.checkNull(deferredDiagnosticHandler);
    1.37              return this; // continue regular compilation
    1.38          }
    1.39  
    1.40 +        Assert.checkNonNull(deferredDiagnosticHandler);
    1.41 +
    1.42          try {
    1.43              List<ClassSymbol> classSymbols = List.nil();
    1.44              List<PackageSymbol> pckSymbols = List.nil();
    1.45 @@ -1115,7 +1120,8 @@
    1.46                  if (!explicitAnnotationProcessingRequested()) {
    1.47                      log.error("proc.no.explicit.annotation.processing.requested",
    1.48                                classnames);
    1.49 -                    log.reportDeferredDiagnostics();
    1.50 +                    deferredDiagnosticHandler.reportDeferredDiagnostics();
    1.51 +                    log.popDiagnosticHandler(deferredDiagnosticHandler);
    1.52                      return this; // TODO: Will this halt compilation?
    1.53                  } else {
    1.54                      boolean errors = false;
    1.55 @@ -1148,33 +1154,36 @@
    1.56                          }
    1.57                      }
    1.58                      if (errors) {
    1.59 -                        log.reportDeferredDiagnostics();
    1.60 +                        deferredDiagnosticHandler.reportDeferredDiagnostics();
    1.61 +                        log.popDiagnosticHandler(deferredDiagnosticHandler);
    1.62                          return this;
    1.63                      }
    1.64                  }
    1.65              }
    1.66              try {
    1.67 -                JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols);
    1.68 +                JavaCompiler c = procEnvImpl.doProcessing(context, roots, classSymbols, pckSymbols,
    1.69 +                        deferredDiagnosticHandler);
    1.70                  if (c != this)
    1.71                      annotationProcessingOccurred = c.annotationProcessingOccurred = true;
    1.72                  // doProcessing will have handled deferred diagnostics
    1.73 -                Assert.check(c.log.deferredDiagFilter == null
    1.74 -                        && c.log.deferredDiagnostics.size() == 0);
    1.75                  return c;
    1.76              } finally {
    1.77                  procEnvImpl.close();
    1.78              }
    1.79          } catch (CompletionFailure ex) {
    1.80              log.error("cant.access", ex.sym, ex.getDetailValue());
    1.81 -            log.reportDeferredDiagnostics();
    1.82 +            deferredDiagnosticHandler.reportDeferredDiagnostics();
    1.83 +            log.popDiagnosticHandler(deferredDiagnosticHandler);
    1.84              return this;
    1.85          }
    1.86      }
    1.87  
    1.88      private boolean unrecoverableError() {
    1.89 -        for (JCDiagnostic d: log.deferredDiagnostics) {
    1.90 -            if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE))
    1.91 -                return true;
    1.92 +        if (deferredDiagnosticHandler != null) {
    1.93 +            for (JCDiagnostic d: deferredDiagnosticHandler.getDiagnostics()) {
    1.94 +                if (d.getKind() == JCDiagnostic.Kind.ERROR && !d.isFlagSet(RECOVERABLE))
    1.95 +                    return true;
    1.96 +            }
    1.97          }
    1.98          return false;
    1.99      }

mercurial