< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java

Print this page
@@ -26,10 +26,11 @@
  package com.sun.tools.javac.comp;
  
  import java.util.*;
  import java.util.function.BiConsumer;
  import java.util.function.Consumer;
+ import java.util.function.Function;
  import java.util.stream.Stream;
  
  import javax.lang.model.element.ElementKind;
  import javax.tools.JavaFileObject;
  

@@ -442,10 +443,23 @@
              log.useSource(prev);
          }
          return env;
      }
  
+     public <R> R runWithAttributedMethod(Env<AttrContext> env, JCMethodDecl tree, Function<JCBlock, R> attributedAction) {
+         JavaFileObject prevSource = log.useSource(env.toplevel.sourcefile);
+         try {
+             JCBlock dupTree = (JCBlock)deferredAttr.attribSpeculative(tree.body, env, statInfo,
+                     null, DeferredAttr.AttributionMode.ATTRIB_TO_TREE,
+                     argumentAttr.withLocalCacheContext());
+             return attributedAction.apply(dupTree);
+         } finally {
+             attrRecover.doRecovery();
+             log.useSource(prevSource);
+         }
+     }
+ 
      private JCTree breakTree = null;
  
      private static class BreakAttr extends RuntimeException {
          static final long serialVersionUID = -6924771130405446405L;
          private transient Env<AttrContext> env;
< prev index next >