src/share/classes/com/sun/source/util/TreeScanner.java

Print this page




  51  * </ul>
  52  *
  53  * <p>Here is an example to count the number of identifier nodes in a tree:
  54  * <pre>
  55  *   class CountIdentifiers extends TreeScanner&lt;Integer,Void&gt; {
  56  *      {@literal @}Override
  57  *      public Integer visitIdentifier(IdentifierTree node, Void p) {
  58  *          return 1;
  59  *      }
  60  *      {@literal @}Override
  61  *      public Integer reduce(Integer r1, Integer r2) {
  62  *          return (r1 == null ? 0 : r1) + (r2 == null ? 0 : r2);
  63  *      }
  64  *   }
  65  * </pre>
  66  *
  67  * @author Peter von der Ah&eacute;
  68  * @author Jonathan Gibbons
  69  * @since 1.6
  70  */

  71 public class TreeScanner<R,P> implements TreeVisitor<R,P> {
  72 
  73     /** Scan a single node.
  74      */
  75     public R scan(Tree node, P p) {
  76         return (node == null) ? null : node.accept(this, p);
  77     }
  78 
  79     private R scanAndReduce(Tree node, P p, R r) {
  80         return reduce(scan(node, p), r);
  81     }
  82 
  83     /** Scan a list of nodes.
  84      */
  85     public R scan(Iterable<? extends Tree> nodes, P p) {
  86         R r = null;
  87         if (nodes != null) {
  88             boolean first = true;
  89             for (Tree node : nodes) {
  90                 r = (first ? scan(node, p) : scanAndReduce(node, p, r));




  51  * </ul>
  52  *
  53  * <p>Here is an example to count the number of identifier nodes in a tree:
  54  * <pre>
  55  *   class CountIdentifiers extends TreeScanner&lt;Integer,Void&gt; {
  56  *      {@literal @}Override
  57  *      public Integer visitIdentifier(IdentifierTree node, Void p) {
  58  *          return 1;
  59  *      }
  60  *      {@literal @}Override
  61  *      public Integer reduce(Integer r1, Integer r2) {
  62  *          return (r1 == null ? 0 : r1) + (r2 == null ? 0 : r2);
  63  *      }
  64  *   }
  65  * </pre>
  66  *
  67  * @author Peter von der Ah&eacute;
  68  * @author Jonathan Gibbons
  69  * @since 1.6
  70  */
  71 @jdk.Supported
  72 public class TreeScanner<R,P> implements TreeVisitor<R,P> {
  73 
  74     /** Scan a single node.
  75      */
  76     public R scan(Tree node, P p) {
  77         return (node == null) ? null : node.accept(this, p);
  78     }
  79 
  80     private R scanAndReduce(Tree node, P p, R r) {
  81         return reduce(scan(node, p), r);
  82     }
  83 
  84     /** Scan a list of nodes.
  85      */
  86     public R scan(Iterable<? extends Tree> nodes, P p) {
  87         R r = null;
  88         if (nodes != null) {
  89             boolean first = true;
  90             for (Tree node : nodes) {
  91                 r = (first ? scan(node, p) : scanAndReduce(node, p, r));