6986246: Trees object is round-specific

Mon, 27 Sep 2010 17:28:49 -0700

author
jjg
date
Mon, 27 Sep 2010 17:28:49 -0700
changeset 696
d4df3b6ee729
parent 695
3c9b64e55c5d
child 697
28b021bb889f

6986246: Trees object is round-specific
Reviewed-by: darcy

src/share/classes/com/sun/tools/javac/api/JavacTrees.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java file | annotate | diff | comparison | revisions
test/tools/javac/processing/model/util/elements/doccomments/TestDocComments.java file | annotate | diff | comparison | revisions
test/tools/javac/tree/TreePosRoundsTest.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Mon Sep 27 14:20:39 2010 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Mon Sep 27 17:28:49 2010 -0700
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -56,7 +56,6 @@
    1.11  import com.sun.tools.javac.comp.MemberEnter;
    1.12  import com.sun.tools.javac.comp.Resolve;
    1.13  import com.sun.tools.javac.model.JavacElements;
    1.14 -import com.sun.tools.javac.processing.JavacMessager;
    1.15  import com.sun.tools.javac.processing.JavacProcessingEnvironment;
    1.16  import com.sun.tools.javac.tree.JCTree.*;
    1.17  import com.sun.tools.javac.tree.JCTree;
    1.18 @@ -81,14 +80,15 @@
    1.19   */
    1.20  public class JavacTrees extends Trees {
    1.21  
    1.22 -    private final Resolve resolve;
    1.23 -    private final Enter enter;
    1.24 -    private final Log log;
    1.25 -    private final MemberEnter memberEnter;
    1.26 -    private final Attr attr;
    1.27 -    private final TreeMaker treeMaker;
    1.28 -    private final JavacElements elements;
    1.29 -    private final JavacTaskImpl javacTaskImpl;
    1.30 +    // in a world of a single context per compilation, these would all be final
    1.31 +    private Resolve resolve;
    1.32 +    private Enter enter;
    1.33 +    private Log log;
    1.34 +    private MemberEnter memberEnter;
    1.35 +    private Attr attr;
    1.36 +    private TreeMaker treeMaker;
    1.37 +    private JavacElements elements;
    1.38 +    private JavacTaskImpl javacTaskImpl;
    1.39  
    1.40      public static JavacTrees instance(JavaCompiler.CompilationTask task) {
    1.41          if (!(task instanceof JavacTaskImpl))
    1.42 @@ -111,6 +111,14 @@
    1.43  
    1.44      private JavacTrees(Context context) {
    1.45          context.put(JavacTrees.class, this);
    1.46 +        init(context);
    1.47 +    }
    1.48 +
    1.49 +    public void updateContext(Context context) {
    1.50 +        init(context);
    1.51 +    }
    1.52 +
    1.53 +    private void init(Context context) {
    1.54          attr = Attr.instance(context);
    1.55          enter = Enter.instance(context);
    1.56          elements = JavacElements.instance(context);
    1.57 @@ -337,6 +345,7 @@
    1.58              super(M);
    1.59          }
    1.60  
    1.61 +        @Override
    1.62          public <T extends JCTree> T copy(T t, JCTree leaf) {
    1.63              T t2 = super.copy(t, leaf);
    1.64              if (t == leaf)
     2.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Mon Sep 27 14:20:39 2010 -0700
     2.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Mon Sep 27 17:28:49 2010 -0700
     2.3 @@ -1,5 +1,5 @@
     2.4  /*
     2.5 - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
     2.6 + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
     2.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     2.8   *
     2.9   * This code is free software; you can redistribute it and/or modify it
    2.10 @@ -49,6 +49,7 @@
    2.11  import javax.tools.JavaFileObject;
    2.12  import javax.tools.DiagnosticListener;
    2.13  
    2.14 +import com.sun.tools.javac.api.JavacTrees;
    2.15  import com.sun.source.util.AbstractTypeProcessor;
    2.16  import com.sun.source.util.TaskEvent;
    2.17  import com.sun.source.util.TaskListener;
    2.18 @@ -1104,6 +1105,12 @@
    2.19                  task.updateContext(next);
    2.20              }
    2.21  
    2.22 +            JavacTrees trees = context.get(JavacTrees.class);
    2.23 +            if (trees != null) {
    2.24 +                next.put(JavacTrees.class, trees);
    2.25 +                trees.updateContext(next);
    2.26 +            }
    2.27 +
    2.28              context.clear();
    2.29              return next;
    2.30          }
     3.1 --- a/test/tools/javac/processing/model/util/elements/doccomments/TestDocComments.java	Mon Sep 27 14:20:39 2010 -0700
     3.2 +++ b/test/tools/javac/processing/model/util/elements/doccomments/TestDocComments.java	Mon Sep 27 17:28:49 2010 -0700
     3.3 @@ -23,7 +23,7 @@
     3.4  
     3.5  /*
     3.6   * @test
     3.7 - * @bug 6877202
     3.8 + * @bug 6877202 6986246
     3.9   * @summary Elements.getDocComment() is not getting JavaDocComments
    3.10   */
    3.11  
    3.12 @@ -139,6 +139,7 @@
    3.13      Filer filer;
    3.14      Messager messager;
    3.15      Elements elements;
    3.16 +    Trees trees;
    3.17      ScanKind skind;
    3.18  
    3.19      int round = 0;
    3.20 @@ -155,6 +156,7 @@
    3.21          filer = pEnv.getFiler();
    3.22          messager = pEnv.getMessager();
    3.23          elements = pEnv.getElementUtils();
    3.24 +        trees = Trees.instance(processingEnv);
    3.25          skind = ScanKind.valueOf(options.get("scan"));
    3.26      }
    3.27  
    3.28 @@ -167,7 +169,6 @@
    3.29          for (Element e: roundEnv.getRootElements()) {
    3.30              System.err.println("scan " + skind + " " + e.getKind() + " " + e.getSimpleName());
    3.31              if (skind == ScanKind.TREE) {
    3.32 -                Trees trees = Trees.instance(processingEnv); // cannot cache this across rounds
    3.33                  new TestTreeScanner().scan(trees.getPath(e), trees);
    3.34              }  else
    3.35                  new TestElementScanner().scan(e);
     4.1 --- a/test/tools/javac/tree/TreePosRoundsTest.java	Mon Sep 27 14:20:39 2010 -0700
     4.2 +++ b/test/tools/javac/tree/TreePosRoundsTest.java	Mon Sep 27 17:28:49 2010 -0700
     4.3 @@ -23,7 +23,7 @@
     4.4  
     4.5  /*
     4.6   * @test
     4.7 - * @bug 6985205
     4.8 + * @bug 6985205 6986246
     4.9   * @summary access to tree positions and doc comments may be lost across annotation processing rounds
    4.10   * @build TreePosRoundsTest
    4.11   * @compile -proc:only -processor TreePosRoundsTest TreePosRoundsTest.java
    4.12 @@ -70,6 +70,7 @@
    4.13  
    4.14      Filer filer;
    4.15      Messager messager;
    4.16 +    Trees trees;
    4.17  
    4.18      @Override
    4.19      public SourceVersion getSupportedSourceVersion() {
    4.20 @@ -81,6 +82,7 @@
    4.21          super.init(pEnv);
    4.22          filer = pEnv.getFiler();
    4.23          messager = pEnv.getMessager();
    4.24 +        trees = Trees.instance(pEnv);
    4.25      }
    4.26  
    4.27      int round = 0;
    4.28 @@ -92,7 +94,6 @@
    4.29          // Scan trees for elements, verifying source tree positions
    4.30          for (Element e: roundEnv.getRootElements()) {
    4.31              try {
    4.32 -                Trees trees = Trees.instance(processingEnv); // cannot cache this across rounds
    4.33                  TreePath p = trees.getPath(e);
    4.34                  new TestTreeScanner(p.getCompilationUnit(), trees).scan(trees.getPath(e), null);
    4.35              } catch (IOException ex) {

mercurial