langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java
changeset 14538 384681be798f
parent 14359 d4099818ab70
child 14547 86d8d242b0c4
equal deleted inserted replaced
14537:ad188879b6fe 14538:384681be798f
   247      */
   247      */
   248     JCTree attribSpeculative(JCTree tree, Env<AttrContext> env, ResultInfo resultInfo) {
   248     JCTree attribSpeculative(JCTree tree, Env<AttrContext> env, ResultInfo resultInfo) {
   249         JCTree newTree = new TreeCopier<Object>(make).copy(tree);
   249         JCTree newTree = new TreeCopier<Object>(make).copy(tree);
   250         Env<AttrContext> speculativeEnv = env.dup(newTree, env.info.dup(env.info.scope.dupUnshared()));
   250         Env<AttrContext> speculativeEnv = env.dup(newTree, env.info.dup(env.info.scope.dupUnshared()));
   251         speculativeEnv.info.scope.owner = env.info.scope.owner;
   251         speculativeEnv.info.scope.owner = env.info.scope.owner;
   252         Filter<JCDiagnostic> prevDeferDiagsFilter = log.deferredDiagFilter;
       
   253         Queue<JCDiagnostic> prevDeferredDiags = log.deferredDiagnostics;
       
   254         final JavaFileObject currentSource = log.currentSourceFile();
   252         final JavaFileObject currentSource = log.currentSourceFile();
       
   253         Log.DeferredDiagnosticHandler deferredDiagnosticHandler =
       
   254                 new Log.DeferredDiagnosticHandler(log, new Filter<JCDiagnostic>() {
       
   255             public boolean accepts(JCDiagnostic t) {
       
   256                 return t.getDiagnosticSource().getFile().equals(currentSource);
       
   257             }
       
   258         });
   255         try {
   259         try {
   256             log.deferredDiagnostics = new ListBuffer<JCDiagnostic>();
       
   257             log.deferredDiagFilter = new Filter<JCDiagnostic>() {
       
   258                 public boolean accepts(JCDiagnostic t) {
       
   259                     return t.getDiagnosticSource().getFile().equals(currentSource);
       
   260                 }
       
   261             };
       
   262             attr.attribTree(newTree, speculativeEnv, resultInfo);
   260             attr.attribTree(newTree, speculativeEnv, resultInfo);
   263             unenterScanner.scan(newTree);
   261             unenterScanner.scan(newTree);
   264             return newTree;
   262             return newTree;
   265         } catch (Abort ex) {
   263         } catch (Abort ex) {
   266             //if some very bad condition occurred during deferred attribution
   264             //if some very bad condition occurred during deferred attribution
   267             //we should dump all errors before killing javac
   265             //we should dump all errors before killing javac
   268             log.reportDeferredDiagnostics();
   266             deferredDiagnosticHandler.reportDeferredDiagnostics();
   269             throw ex;
   267             throw ex;
   270         } finally {
   268         } finally {
   271             unenterScanner.scan(newTree);
   269             unenterScanner.scan(newTree);
   272             log.deferredDiagFilter = prevDeferDiagsFilter;
   270             log.popDiagnosticHandler(deferredDiagnosticHandler);
   273             log.deferredDiagnostics = prevDeferredDiags;
       
   274         }
   271         }
   275     }
   272     }
   276     //where
   273     //where
   277         protected TreeScanner unenterScanner = new TreeScanner() {
   274         protected TreeScanner unenterScanner = new TreeScanner() {
   278             @Override
   275             @Override