1 /* 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.nashorn.api.tree; 27 28 /** 29 * A visitor of trees, in the style of the visitor design pattern. 30 * Classes implementing this interface are used to operate 31 * on a tree when the kind of tree is unknown at compile time. 32 * When a visitor is passed to an tree's {@link Tree#accept 33 * accept} method, the <code>visit<i>Xyz</i></code> method most applicable 34 * to that tree is invoked. 35 * 36 * <p> Classes implementing this interface may or may not throw a 37 * {@code NullPointerException} if the additional parameter {@code p} 38 * is {@code null}; see documentation of the implementing class for 39 * details. 40 * 41 * <p> <b>WARNING:</b> It is possible that methods will be added to 42 this interface to accommodate new, currently unknown, language 43 structures added to future versions of the ECMAScript programming 44 language. When new visit methods are added for new Tree subtypes, 45 default method bodies will be introduced which will call visitUnknown 46 method as a fallback. 47 * 48 * @deprecated Nashorn JavaScript script engine and APIs, and the jjs tool 49 * are deprecated with the intent to remove them in a future release. 50 * 51 * @param <R> the return type of this visitor's methods. Use {@link 52 * Void} for visitors that do not need to return results. 53 * @param <P> the type of the additional parameter to this visitor's 54 * methods. Use {@code Void} for visitors that do not need an 55 * additional parameter. 56 * 57 * @since 9 58 */ 59 @Deprecated(since="11", forRemoval=true) 60 public interface TreeVisitor<R,P> { 61 /** 62 * Visit assignment tree. 63 * 64 * @param node node being visited 65 * @param p extra parameter passed to the visitor 66 * @return value from the visitor 67 */ 68 R visitAssignment(AssignmentTree node, P p); 69 70 /** 71 * Visit compound assignment tree. 72 * 73 * @param node node being visited 74 * @param p extra parameter passed to the visitor 75 * @return value from the visitor 76 */ 77 R visitCompoundAssignment(CompoundAssignmentTree node, P p); 78 79 /** 80 * Visit binary expression tree. 81 * 82 * @param node node being visited 83 * @param p extra parameter passed to the visitor 84 * @return value from the visitor 85 */ 86 R visitBinary(BinaryTree node, P p); 87 88 /** 89 * Visit block statement tree. 90 * 91 * @param node node being visited 92 * @param p extra parameter passed to the visitor 93 * @return value from the visitor 94 */ 95 R visitBlock(BlockTree node, P p); 96 97 /** 98 * Visit break statement tree. 99 * 100 * @param node node being visited 101 * @param p extra parameter passed to the visitor 102 * @return value from the visitor 103 */ 104 R visitBreak(BreakTree node, P p); 105 106 /** 107 * Visit case statement tree. 108 * 109 * @param node node being visited 110 * @param p extra parameter passed to the visitor 111 * @return value from the visitor 112 */ 113 R visitCase(CaseTree node, P p); 114 115 /** 116 * Visit catch block statement tree. 117 * 118 * @param node node being visited 119 * @param p extra parameter passed to the visitor 120 * @return value from the visitor 121 */ 122 R visitCatch(CatchTree node, P p); 123 124 /** 125 * Visit class statement tree. 126 * 127 * @param node node being visited 128 * @param p extra parameter passed to the visitor 129 * @return value from the visitor 130 */ 131 R visitClassDeclaration(ClassDeclarationTree node, P p); 132 133 /** 134 * Visit class expression tree. 135 * 136 * @param node node being visited 137 * @param p extra parameter passed to the visitor 138 * @return value from the visitor 139 */ 140 R visitClassExpression(ClassExpressionTree node, P p); 141 142 /** 143 * Visit conditional expression tree. 144 * 145 * @param node node being visited 146 * @param p extra parameter passed to the visitor 147 * @return value from the visitor 148 */ 149 R visitConditionalExpression(ConditionalExpressionTree node, P p); 150 151 /** 152 * Visit continue statement tree. 153 * 154 * @param node node being visited 155 * @param p extra parameter passed to the visitor 156 * @return value from the visitor 157 */ 158 R visitContinue(ContinueTree node, P p); 159 160 /** 161 * Visit debugger statement tree. 162 * 163 * @param node node being visited 164 * @param p extra parameter passed to the visitor 165 * @return value from the visitor 166 */ 167 R visitDebugger(DebuggerTree node, P p); 168 169 /** 170 * Visit do-while statement tree. 171 * 172 * @param node node being visited 173 * @param p extra parameter passed to the visitor 174 * @return value from the visitor 175 */ 176 R visitDoWhileLoop(DoWhileLoopTree node, P p); 177 178 /** 179 * Visit error expression tree. 180 * 181 * @param node node being visited 182 * @param p extra parameter passed to the visitor 183 * @return value from the visitor 184 */ 185 R visitErroneous(ErroneousTree node, P p); 186 187 /** 188 * Visit expression statement tree. 189 * 190 * @param node node being visited 191 * @param p extra parameter passed to the visitor 192 * @return value from the visitor 193 */ 194 R visitExpressionStatement(ExpressionStatementTree node, P p); 195 196 /** 197 * Visit 'for' statement tree. 198 * 199 * @param node node being visited 200 * @param p extra parameter passed to the visitor 201 * @return value from the visitor 202 */ 203 R visitForLoop(ForLoopTree node, P p); 204 205 /** 206 * Visit for..in statement tree. 207 * 208 * @param node node being visited 209 * @param p extra parameter passed to the visitor 210 * @return value from the visitor 211 */ 212 R visitForInLoop(ForInLoopTree node, P p); 213 214 /** 215 * Visit for..of statement tree. 216 * 217 * @param node node being visited 218 * @param p extra parameter passed to the visitor 219 * @return value from the visitor 220 */ 221 R visitForOfLoop(ForOfLoopTree node, P p); 222 223 /** 224 * Visit function call expression tree. 225 * 226 * @param node node being visited 227 * @param p extra parameter passed to the visitor 228 * @return value from the visitor 229 */ 230 R visitFunctionCall(FunctionCallTree node, P p); 231 232 /** 233 * Visit function declaration tree. 234 * 235 * @param node node being visited 236 * @param p extra parameter passed to the visitor 237 * @return value from the visitor 238 */ 239 R visitFunctionDeclaration(FunctionDeclarationTree node, P p); 240 241 /** 242 * Visit function expression tree. 243 * 244 * @param node node being visited 245 * @param p extra parameter passed to the visitor 246 * @return value from the visitor 247 */ 248 R visitFunctionExpression(FunctionExpressionTree node, P p); 249 250 /** 251 * Visit identifier tree. 252 * 253 * @param node node being visited 254 * @param p extra parameter passed to the visitor 255 * @return value from the visitor 256 */ 257 R visitIdentifier(IdentifierTree node, P p); 258 259 /** 260 * Visit 'if' statement tree. 261 * 262 * @param node node being visited 263 * @param p extra parameter passed to the visitor 264 * @return value from the visitor 265 */ 266 R visitIf(IfTree node, P p); 267 268 /** 269 * Visit array access expression tree. 270 * 271 * @param node node being visited 272 * @param p extra parameter passed to the visitor 273 * @return value from the visitor 274 */ 275 R visitArrayAccess(ArrayAccessTree node, P p); 276 277 /** 278 * Visit array literal expression tree. 279 * 280 * @param node node being visited 281 * @param p extra parameter passed to the visitor 282 * @return value from the visitor 283 */ 284 R visitArrayLiteral(ArrayLiteralTree node, P p); 285 286 /** 287 * Visit labeled statement tree. 288 * 289 * @param node node being visited 290 * @param p extra parameter passed to the visitor 291 * @return value from the visitor 292 */ 293 R visitLabeledStatement(LabeledStatementTree node, P p); 294 295 /** 296 * Visit literal expression tree. 297 * 298 * @param node node being visited 299 * @param p extra parameter passed to the visitor 300 * @return value from the visitor 301 */ 302 R visitLiteral(LiteralTree node, P p); 303 304 /** 305 * Visit parenthesized expression tree. 306 * 307 * @param node node being visited 308 * @param p extra parameter passed to the visitor 309 * @return value from the visitor 310 */ 311 R visitParenthesized(ParenthesizedTree node, P p); 312 313 /** 314 * Visit return statement tree. 315 * 316 * @param node node being visited 317 * @param p extra parameter passed to the visitor 318 * @return value from the visitor 319 */ 320 R visitReturn(ReturnTree node, P p); 321 322 /** 323 * Visit member select expression tree. 324 * 325 * @param node node being visited 326 * @param p extra parameter passed to the visitor 327 * @return value from the visitor 328 */ 329 R visitMemberSelect(MemberSelectTree node, P p); 330 331 /** 332 * Visit 'new' expression tree. 333 * 334 * @param node node being visited 335 * @param p extra parameter passed to the visitor 336 * @return value from the visitor 337 */ 338 R visitNew(NewTree node, P p); 339 340 /** 341 * Visit object literal tree. 342 * 343 * @param node node being visited 344 * @param p extra parameter passed to the visitor 345 * @return value from the visitor 346 */ 347 R visitObjectLiteral(ObjectLiteralTree node, P p); 348 349 /** 350 * Visit a property of an object literal expression tree. 351 * 352 * @param node node being visited 353 * @param p extra parameter passed to the visitor 354 * @return value from the visitor 355 */ 356 R visitProperty(PropertyTree node, P p); 357 358 /** 359 * Visit regular expression literal tree. 360 * 361 * @param node node being visited 362 * @param p extra parameter passed to the visitor 363 * @return value from the visitor 364 */ 365 R visitRegExpLiteral(RegExpLiteralTree node, P p); 366 367 /** 368 * Visit template literal tree. 369 * 370 * @param node node being visited 371 * @param p extra parameter passed to the visitor 372 * @return value from the visitor 373 */ 374 R visitTemplateLiteral(TemplateLiteralTree node, P p); 375 376 /** 377 * Visit an empty statement tree. 378 * 379 * @param node node being visited 380 * @param p extra parameter passed to the visitor 381 * @return value from the visitor 382 */ 383 R visitEmptyStatement(EmptyStatementTree node, P p); 384 385 /** 386 * Visit 'spread' expression tree. 387 * 388 * @param node node being visited 389 * @param p extra parameter passed to the visitor 390 * @return value from the visitor 391 */ 392 R visitSpread(SpreadTree node, P p); 393 394 /** 395 * Visit 'switch' statement tree. 396 * 397 * @param node node being visited 398 * @param p extra parameter passed to the visitor 399 * @return value from the visitor 400 */ 401 R visitSwitch(SwitchTree node, P p); 402 403 /** 404 * Visit 'throw' expression tree. 405 * 406 * @param node node being visited 407 * @param p extra parameter passed to the visitor 408 * @return value from the visitor 409 */ 410 R visitThrow(ThrowTree node, P p); 411 412 /** 413 * Visit compilation unit tree. 414 * 415 * @param node node being visited 416 * @param p extra parameter passed to the visitor 417 * @return value from the visitor 418 */ 419 R visitCompilationUnit(CompilationUnitTree node, P p); 420 421 /** 422 * Visit Module tree. 423 * 424 * @param node node being visited 425 * @param p extra parameter passed to the visitor 426 * @return value from the visitor 427 */ 428 R visitModule(ModuleTree node, P p); 429 430 /** 431 * Visit Module ExportEntry tree. 432 * 433 * @param node node being visited 434 * @param p extra parameter passed to the visitor 435 * @return value from the visitor 436 */ 437 R visitExportEntry(ExportEntryTree node, P p); 438 439 /** 440 * Visit Module ImportEntry tree. 441 * 442 * @param node node being visited 443 * @param p extra parameter passed to the visitor 444 * @return value from the visitor 445 */ 446 R visitImportEntry(ImportEntryTree node, P p); 447 448 /** 449 * Visit 'try' statement tree. 450 * 451 * @param node node being visited 452 * @param p extra parameter passed to the visitor 453 * @return value from the visitor 454 */ 455 R visitTry(TryTree node, P p); 456 457 /** 458 * Visit 'instanceof' expression tree. 459 * 460 * @param node node being visited 461 * @param p extra parameter passed to the visitor 462 * @return value from the visitor 463 */ 464 R visitInstanceOf(InstanceOfTree node, P p); 465 466 /** 467 * Visit unary expression tree. 468 * 469 * @param node node being visited 470 * @param p extra parameter passed to the visitor 471 * @return value from the visitor 472 */ 473 R visitUnary(UnaryTree node, P p); 474 475 /** 476 * Visit variable declaration tree. 477 * 478 * @param node node being visited 479 * @param p extra parameter passed to the visitor 480 * @return value from the visitor 481 */ 482 R visitVariable(VariableTree node, P p); 483 484 /** 485 * Visit 'while' statement tree. 486 * 487 * @param node node being visited 488 * @param p extra parameter passed to the visitor 489 * @return value from the visitor 490 */ 491 R visitWhileLoop(WhileLoopTree node, P p); 492 493 /** 494 * Visit 'with' statement tree. 495 * 496 * @param node node being visited 497 * @param p extra parameter passed to the visitor 498 * @return value from the visitor 499 */ 500 R visitWith(WithTree node, P p); 501 502 /** 503 * Visit 'yield' expression tree. 504 * 505 * @param node node being visited 506 * @param p extra parameter passed to the visitor 507 * @return value from the visitor 508 */ 509 R visitYield(YieldTree node, P p); 510 511 /** 512 * Visit unknown expression/statement tree. This fallback will be 513 * called if new Tree subtypes are introduced in future. A specific 514 * implementation may throw {{@linkplain UnknownTreeException unknown tree exception} 515 * if the visitor implementation was for an older language version. 516 * 517 * @param node node being visited 518 * @param p extra parameter passed to the visitor 519 * @return value from the visitor 520 */ 521 R visitUnknown(Tree node, P p); 522 }