src/share/classes/com/sun/tools/javac/tree/TreeScanner.java

Thu, 31 Aug 2017 15:17:03 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:17:03 +0800
changeset 2525
2eb010b6cb22
parent 1755
ddb4a2bfcd82
parent 0
959103a6100f
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation. Oracle designates this
aoqi@0 8 * particular file as subject to the "Classpath" exception as provided
aoqi@0 9 * by Oracle in the LICENSE file that accompanied this code.
aoqi@0 10 *
aoqi@0 11 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 14 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 15 * accompanied this code).
aoqi@0 16 *
aoqi@0 17 * You should have received a copy of the GNU General Public License version
aoqi@0 18 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 20 *
aoqi@0 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 22 * or visit www.oracle.com if you need additional information or have any
aoqi@0 23 * questions.
aoqi@0 24 */
aoqi@0 25
aoqi@0 26 package com.sun.tools.javac.tree;
aoqi@0 27
aoqi@0 28 import com.sun.tools.javac.util.*;
aoqi@0 29 import com.sun.tools.javac.tree.JCTree.*;
aoqi@0 30
aoqi@0 31 /** A subclass of Tree.Visitor, this class defines
aoqi@0 32 * a general tree scanner pattern. Translation proceeds recursively in
aoqi@0 33 * left-to-right order down a tree. There is one visitor method in this class
aoqi@0 34 * for every possible kind of tree node. To obtain a specific
aoqi@0 35 * scanner, it suffices to override those visitor methods which
aoqi@0 36 * do some interesting work. The scanner class itself takes care of all
aoqi@0 37 * navigational aspects.
aoqi@0 38 *
aoqi@0 39 * <p><b>This is NOT part of any supported API.
aoqi@0 40 * If you write code that depends on this, you do so at your own risk.
aoqi@0 41 * This code and its internal interfaces are subject to change or
aoqi@0 42 * deletion without notice.</b>
aoqi@0 43 */
aoqi@0 44 public class TreeScanner extends Visitor {
aoqi@0 45
aoqi@0 46 /** Visitor method: Scan a single node.
aoqi@0 47 */
aoqi@0 48 public void scan(JCTree tree) {
aoqi@0 49 if(tree!=null) tree.accept(this);
aoqi@0 50 }
aoqi@0 51
aoqi@0 52 /** Visitor method: scan a list of nodes.
aoqi@0 53 */
aoqi@0 54 public void scan(List<? extends JCTree> trees) {
aoqi@0 55 if (trees != null)
aoqi@0 56 for (List<? extends JCTree> l = trees; l.nonEmpty(); l = l.tail)
aoqi@0 57 scan(l.head);
aoqi@0 58 }
aoqi@0 59
aoqi@0 60
aoqi@0 61 /* ***************************************************************************
aoqi@0 62 * Visitor methods
aoqi@0 63 ****************************************************************************/
aoqi@0 64
aoqi@0 65 public void visitTopLevel(JCCompilationUnit tree) {
aoqi@0 66 scan(tree.packageAnnotations);
aoqi@0 67 scan(tree.pid);
aoqi@0 68 scan(tree.defs);
aoqi@0 69 }
aoqi@0 70
aoqi@0 71 public void visitImport(JCImport tree) {
aoqi@0 72 scan(tree.qualid);
aoqi@0 73 }
aoqi@0 74
aoqi@0 75 public void visitClassDef(JCClassDecl tree) {
aoqi@0 76 scan(tree.mods);
aoqi@0 77 scan(tree.typarams);
aoqi@0 78 scan(tree.extending);
aoqi@0 79 scan(tree.implementing);
aoqi@0 80 scan(tree.defs);
aoqi@0 81 }
aoqi@0 82
aoqi@0 83 public void visitMethodDef(JCMethodDecl tree) {
aoqi@0 84 scan(tree.mods);
aoqi@0 85 scan(tree.restype);
aoqi@0 86 scan(tree.typarams);
aoqi@0 87 scan(tree.recvparam);
aoqi@0 88 scan(tree.params);
aoqi@0 89 scan(tree.thrown);
aoqi@0 90 scan(tree.defaultValue);
aoqi@0 91 scan(tree.body);
aoqi@0 92 }
aoqi@0 93
aoqi@0 94 public void visitVarDef(JCVariableDecl tree) {
aoqi@0 95 scan(tree.mods);
aoqi@0 96 scan(tree.vartype);
aoqi@0 97 scan(tree.nameexpr);
aoqi@0 98 scan(tree.init);
aoqi@0 99 }
aoqi@0 100
aoqi@0 101 public void visitSkip(JCSkip tree) {
aoqi@0 102 }
aoqi@0 103
aoqi@0 104 public void visitBlock(JCBlock tree) {
aoqi@0 105 scan(tree.stats);
aoqi@0 106 }
aoqi@0 107
aoqi@0 108 public void visitDoLoop(JCDoWhileLoop tree) {
aoqi@0 109 scan(tree.body);
aoqi@0 110 scan(tree.cond);
aoqi@0 111 }
aoqi@0 112
aoqi@0 113 public void visitWhileLoop(JCWhileLoop tree) {
aoqi@0 114 scan(tree.cond);
aoqi@0 115 scan(tree.body);
aoqi@0 116 }
aoqi@0 117
aoqi@0 118 public void visitForLoop(JCForLoop tree) {
aoqi@0 119 scan(tree.init);
aoqi@0 120 scan(tree.cond);
aoqi@0 121 scan(tree.step);
aoqi@0 122 scan(tree.body);
aoqi@0 123 }
aoqi@0 124
aoqi@0 125 public void visitForeachLoop(JCEnhancedForLoop tree) {
aoqi@0 126 scan(tree.var);
aoqi@0 127 scan(tree.expr);
aoqi@0 128 scan(tree.body);
aoqi@0 129 }
aoqi@0 130
aoqi@0 131 public void visitLabelled(JCLabeledStatement tree) {
aoqi@0 132 scan(tree.body);
aoqi@0 133 }
aoqi@0 134
aoqi@0 135 public void visitSwitch(JCSwitch tree) {
aoqi@0 136 scan(tree.selector);
aoqi@0 137 scan(tree.cases);
aoqi@0 138 }
aoqi@0 139
aoqi@0 140 public void visitCase(JCCase tree) {
aoqi@0 141 scan(tree.pat);
aoqi@0 142 scan(tree.stats);
aoqi@0 143 }
aoqi@0 144
aoqi@0 145 public void visitSynchronized(JCSynchronized tree) {
aoqi@0 146 scan(tree.lock);
aoqi@0 147 scan(tree.body);
aoqi@0 148 }
aoqi@0 149
aoqi@0 150 public void visitTry(JCTry tree) {
aoqi@0 151 scan(tree.resources);
aoqi@0 152 scan(tree.body);
aoqi@0 153 scan(tree.catchers);
aoqi@0 154 scan(tree.finalizer);
aoqi@0 155 }
aoqi@0 156
aoqi@0 157 public void visitCatch(JCCatch tree) {
aoqi@0 158 scan(tree.param);
aoqi@0 159 scan(tree.body);
aoqi@0 160 }
aoqi@0 161
aoqi@0 162 public void visitConditional(JCConditional tree) {
aoqi@0 163 scan(tree.cond);
aoqi@0 164 scan(tree.truepart);
aoqi@0 165 scan(tree.falsepart);
aoqi@0 166 }
aoqi@0 167
aoqi@0 168 public void visitIf(JCIf tree) {
aoqi@0 169 scan(tree.cond);
aoqi@0 170 scan(tree.thenpart);
aoqi@0 171 scan(tree.elsepart);
aoqi@0 172 }
aoqi@0 173
aoqi@0 174 public void visitExec(JCExpressionStatement tree) {
aoqi@0 175 scan(tree.expr);
aoqi@0 176 }
aoqi@0 177
aoqi@0 178 public void visitBreak(JCBreak tree) {
aoqi@0 179 }
aoqi@0 180
aoqi@0 181 public void visitContinue(JCContinue tree) {
aoqi@0 182 }
aoqi@0 183
aoqi@0 184 public void visitReturn(JCReturn tree) {
aoqi@0 185 scan(tree.expr);
aoqi@0 186 }
aoqi@0 187
aoqi@0 188 public void visitThrow(JCThrow tree) {
aoqi@0 189 scan(tree.expr);
aoqi@0 190 }
aoqi@0 191
aoqi@0 192 public void visitAssert(JCAssert tree) {
aoqi@0 193 scan(tree.cond);
aoqi@0 194 scan(tree.detail);
aoqi@0 195 }
aoqi@0 196
aoqi@0 197 public void visitApply(JCMethodInvocation tree) {
aoqi@0 198 scan(tree.typeargs);
aoqi@0 199 scan(tree.meth);
aoqi@0 200 scan(tree.args);
aoqi@0 201 }
aoqi@0 202
aoqi@0 203 public void visitNewClass(JCNewClass tree) {
aoqi@0 204 scan(tree.encl);
aoqi@0 205 scan(tree.typeargs);
aoqi@0 206 scan(tree.clazz);
aoqi@0 207 scan(tree.args);
aoqi@0 208 scan(tree.def);
aoqi@0 209 }
aoqi@0 210
aoqi@0 211 public void visitNewArray(JCNewArray tree) {
aoqi@0 212 scan(tree.annotations);
aoqi@0 213 scan(tree.elemtype);
aoqi@0 214 scan(tree.dims);
aoqi@0 215 for (List<JCAnnotation> annos : tree.dimAnnotations)
aoqi@0 216 scan(annos);
aoqi@0 217 scan(tree.elems);
aoqi@0 218 }
aoqi@0 219
aoqi@0 220 public void visitLambda(JCLambda tree) {
aoqi@0 221 scan(tree.body);
aoqi@0 222 scan(tree.params);
aoqi@0 223 }
aoqi@0 224
aoqi@0 225 public void visitParens(JCParens tree) {
aoqi@0 226 scan(tree.expr);
aoqi@0 227 }
aoqi@0 228
aoqi@0 229 public void visitAssign(JCAssign tree) {
aoqi@0 230 scan(tree.lhs);
aoqi@0 231 scan(tree.rhs);
aoqi@0 232 }
aoqi@0 233
aoqi@0 234 public void visitAssignop(JCAssignOp tree) {
aoqi@0 235 scan(tree.lhs);
aoqi@0 236 scan(tree.rhs);
aoqi@0 237 }
aoqi@0 238
aoqi@0 239 public void visitUnary(JCUnary tree) {
aoqi@0 240 scan(tree.arg);
aoqi@0 241 }
aoqi@0 242
aoqi@0 243 public void visitBinary(JCBinary tree) {
aoqi@0 244 scan(tree.lhs);
aoqi@0 245 scan(tree.rhs);
aoqi@0 246 }
aoqi@0 247
aoqi@0 248 public void visitTypeCast(JCTypeCast tree) {
aoqi@0 249 scan(tree.clazz);
aoqi@0 250 scan(tree.expr);
aoqi@0 251 }
aoqi@0 252
aoqi@0 253 public void visitTypeTest(JCInstanceOf tree) {
aoqi@0 254 scan(tree.expr);
aoqi@0 255 scan(tree.clazz);
aoqi@0 256 }
aoqi@0 257
aoqi@0 258 public void visitIndexed(JCArrayAccess tree) {
aoqi@0 259 scan(tree.indexed);
aoqi@0 260 scan(tree.index);
aoqi@0 261 }
aoqi@0 262
aoqi@0 263 public void visitSelect(JCFieldAccess tree) {
aoqi@0 264 scan(tree.selected);
aoqi@0 265 }
aoqi@0 266
aoqi@0 267 public void visitReference(JCMemberReference tree) {
aoqi@0 268 scan(tree.expr);
aoqi@0 269 scan(tree.typeargs);
aoqi@0 270 }
aoqi@0 271
aoqi@0 272 public void visitIdent(JCIdent tree) {
aoqi@0 273 }
aoqi@0 274
aoqi@0 275 public void visitLiteral(JCLiteral tree) {
aoqi@0 276 }
aoqi@0 277
aoqi@0 278 public void visitTypeIdent(JCPrimitiveTypeTree tree) {
aoqi@0 279 }
aoqi@0 280
aoqi@0 281 public void visitTypeArray(JCArrayTypeTree tree) {
aoqi@0 282 scan(tree.elemtype);
aoqi@0 283 }
aoqi@0 284
aoqi@0 285 public void visitTypeApply(JCTypeApply tree) {
aoqi@0 286 scan(tree.clazz);
aoqi@0 287 scan(tree.arguments);
aoqi@0 288 }
aoqi@0 289
aoqi@0 290 public void visitTypeUnion(JCTypeUnion tree) {
aoqi@0 291 scan(tree.alternatives);
aoqi@0 292 }
aoqi@0 293
aoqi@0 294 public void visitTypeIntersection(JCTypeIntersection tree) {
aoqi@0 295 scan(tree.bounds);
aoqi@0 296 }
aoqi@0 297
aoqi@0 298 public void visitTypeParameter(JCTypeParameter tree) {
aoqi@0 299 scan(tree.annotations);
aoqi@0 300 scan(tree.bounds);
aoqi@0 301 }
aoqi@0 302
aoqi@0 303 @Override
aoqi@0 304 public void visitWildcard(JCWildcard tree) {
aoqi@0 305 scan(tree.kind);
aoqi@0 306 if (tree.inner != null)
aoqi@0 307 scan(tree.inner);
aoqi@0 308 }
aoqi@0 309
aoqi@0 310 @Override
aoqi@0 311 public void visitTypeBoundKind(TypeBoundKind that) {
aoqi@0 312 }
aoqi@0 313
aoqi@0 314 public void visitModifiers(JCModifiers tree) {
aoqi@0 315 scan(tree.annotations);
aoqi@0 316 }
aoqi@0 317
aoqi@0 318 public void visitAnnotation(JCAnnotation tree) {
aoqi@0 319 scan(tree.annotationType);
aoqi@0 320 scan(tree.args);
aoqi@0 321 }
aoqi@0 322
aoqi@0 323 public void visitAnnotatedType(JCAnnotatedType tree) {
aoqi@0 324 scan(tree.annotations);
aoqi@0 325 scan(tree.underlyingType);
aoqi@0 326 }
aoqi@0 327
aoqi@0 328 public void visitErroneous(JCErroneous tree) {
aoqi@0 329 }
aoqi@0 330
aoqi@0 331 public void visitLetExpr(LetExpr tree) {
aoqi@0 332 scan(tree.defs);
aoqi@0 333 scan(tree.expr);
aoqi@0 334 }
aoqi@0 335
aoqi@0 336 public void visitTree(JCTree tree) {
aoqi@0 337 Assert.error();
aoqi@0 338 }
aoqi@0 339 }

mercurial