src/share/classes/com/sun/tools/javac/api/JavacTrees.java

changeset 1090
1807fc3fd33c
parent 988
7ae6c0fd479b
child 1127
ca49d50318dc
     1.1 --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Wed Sep 14 12:07:50 2011 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Wed Sep 14 12:14:30 2011 -0700
     1.3 @@ -65,6 +65,7 @@
     1.4  import com.sun.tools.javac.tree.TreeCopier;
     1.5  import com.sun.tools.javac.tree.TreeInfo;
     1.6  import com.sun.tools.javac.tree.TreeMaker;
     1.7 +import com.sun.tools.javac.util.Assert;
     1.8  import com.sun.tools.javac.util.Context;
     1.9  import com.sun.tools.javac.util.JCDiagnostic;
    1.10  import com.sun.tools.javac.util.List;
    1.11 @@ -263,9 +264,10 @@
    1.12          if (!(path.getLeaf() instanceof JCTree))  // implicit null-check
    1.13              throw new IllegalArgumentException();
    1.14  
    1.15 -        // if we're being invoked via from a JSR199 client, we need to make sure
    1.16 -        // all the classes have been entered; if we're being invoked from JSR269,
    1.17 -        // then the classes will already have been entered.
    1.18 +        // if we're being invoked from a Tree API client via parse/enter/analyze,
    1.19 +        // we need to make sure all the classes have been entered;
    1.20 +        // if we're being invoked from JSR 199 or JSR 269, then the classes
    1.21 +        // will already have been entered.
    1.22          if (javacTaskImpl != null) {
    1.23              try {
    1.24                  javacTaskImpl.enter(null);
    1.25 @@ -313,10 +315,19 @@
    1.26                      break;
    1.27                  case BLOCK: {
    1.28  //                    System.err.println("BLOCK: ");
    1.29 -                    if (method != null)
    1.30 -                        env = memberEnter.getMethodEnv(method, env);
    1.31 -                    JCTree body = copier.copy((JCTree)tree, (JCTree) path.getLeaf());
    1.32 -                    env = attribStatToTree(body, env, copier.leafCopy);
    1.33 +                    if (method != null) {
    1.34 +                        try {
    1.35 +                            Assert.check(method.body == tree);
    1.36 +                            method.body = copier.copy((JCBlock)tree, (JCTree) path.getLeaf());
    1.37 +                            env = memberEnter.getMethodEnv(method, env);
    1.38 +                            env = attribStatToTree(method.body, env, copier.leafCopy);
    1.39 +                        } finally {
    1.40 +                            method.body = (JCBlock) tree;
    1.41 +                        }
    1.42 +                    } else {
    1.43 +                        JCBlock body = copier.copy((JCBlock)tree, (JCTree) path.getLeaf());
    1.44 +                        env = attribStatToTree(body, env, copier.leafCopy);
    1.45 +                    }
    1.46                      return env;
    1.47                  }
    1.48                  default:
    1.49 @@ -329,7 +340,7 @@
    1.50                      }
    1.51              }
    1.52          }
    1.53 -        return field != null ? memberEnter.getInitEnv(field, env) : env;
    1.54 +        return (field != null) ? memberEnter.getInitEnv(field, env) : env;
    1.55      }
    1.56  
    1.57      private Env<AttrContext> attribStatToTree(JCTree stat, Env<AttrContext>env, JCTree tree) {

mercurial