Home | History | Annotate | Download | only in visitor
      1 /*
      2  * Copyright (C) 2007-2010 Jlio Vilmar Gesser.
      3  * Copyright (C) 2011, 2013-2015 The JavaParser Team.
      4  *
      5  * This file is part of JavaParser.
      6  *
      7  * JavaParser can be used either under the terms of
      8  * a) the GNU Lesser General Public License as published by
      9  *     the Free Software Foundation, either version 3 of the License, or
     10  *     (at your option) any later version.
     11  * b) the terms of the Apache License
     12  *
     13  * You should have received a copy of both licenses in LICENCE.LGPL and
     14  * LICENCE.APACHE. Please refer to those files for details.
     15  *
     16  * JavaParser is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19  * GNU Lesser General Public License for more details.
     20  */
     21 
     22 package com.github.javaparser.ast.visitor;
     23 
     24 import com.github.javaparser.ast.comments.BlockComment;
     25 import com.github.javaparser.ast.CompilationUnit;
     26 import com.github.javaparser.ast.ImportDeclaration;
     27 import com.github.javaparser.ast.comments.LineComment;
     28 import com.github.javaparser.ast.PackageDeclaration;
     29 import com.github.javaparser.ast.TypeParameter;
     30 import com.github.javaparser.ast.body.AnnotationDeclaration;
     31 import com.github.javaparser.ast.body.AnnotationMemberDeclaration;
     32 import com.github.javaparser.ast.body.BodyDeclaration;
     33 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
     34 import com.github.javaparser.ast.body.ConstructorDeclaration;
     35 import com.github.javaparser.ast.body.EmptyMemberDeclaration;
     36 import com.github.javaparser.ast.body.EmptyTypeDeclaration;
     37 import com.github.javaparser.ast.body.EnumConstantDeclaration;
     38 import com.github.javaparser.ast.body.EnumDeclaration;
     39 import com.github.javaparser.ast.body.FieldDeclaration;
     40 import com.github.javaparser.ast.body.InitializerDeclaration;
     41 import com.github.javaparser.ast.comments.JavadocComment;
     42 import com.github.javaparser.ast.body.MethodDeclaration;
     43 import com.github.javaparser.ast.body.MultiTypeParameter;
     44 import com.github.javaparser.ast.body.Parameter;
     45 import com.github.javaparser.ast.body.TypeDeclaration;
     46 import com.github.javaparser.ast.body.VariableDeclarator;
     47 import com.github.javaparser.ast.body.VariableDeclaratorId;
     48 import com.github.javaparser.ast.expr.*;
     49 import com.github.javaparser.ast.stmt.AssertStmt;
     50 import com.github.javaparser.ast.stmt.BlockStmt;
     51 import com.github.javaparser.ast.stmt.BreakStmt;
     52 import com.github.javaparser.ast.stmt.CatchClause;
     53 import com.github.javaparser.ast.stmt.ContinueStmt;
     54 import com.github.javaparser.ast.stmt.DoStmt;
     55 import com.github.javaparser.ast.stmt.EmptyStmt;
     56 import com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt;
     57 import com.github.javaparser.ast.stmt.ExpressionStmt;
     58 import com.github.javaparser.ast.stmt.ForStmt;
     59 import com.github.javaparser.ast.stmt.ForeachStmt;
     60 import com.github.javaparser.ast.stmt.IfStmt;
     61 import com.github.javaparser.ast.stmt.LabeledStmt;
     62 import com.github.javaparser.ast.stmt.ReturnStmt;
     63 import com.github.javaparser.ast.stmt.Statement;
     64 import com.github.javaparser.ast.stmt.SwitchEntryStmt;
     65 import com.github.javaparser.ast.stmt.SwitchStmt;
     66 import com.github.javaparser.ast.stmt.SynchronizedStmt;
     67 import com.github.javaparser.ast.stmt.ThrowStmt;
     68 import com.github.javaparser.ast.stmt.TryStmt;
     69 import com.github.javaparser.ast.stmt.TypeDeclarationStmt;
     70 import com.github.javaparser.ast.stmt.WhileStmt;
     71 import com.github.javaparser.ast.type.*;
     72 
     73 /**
     74  * @author Julio Vilmar Gesser
     75  */
     76 public abstract class GenericVisitorAdapter<R, A> implements GenericVisitor<R, A> {
     77 
     78 	@Override
     79 	public R visit(final AnnotationDeclaration n, final A arg) {
     80 		if (n.getJavaDoc() != null) {
     81 			{
     82 				R result = n.getJavaDoc().accept(this, arg);
     83 				if (result != null) {
     84 					return result;
     85 				}
     86 			}
     87 		}
     88 		if (n.getAnnotations() != null) {
     89 			for (final AnnotationExpr a : n.getAnnotations()) {
     90 				{
     91 					R result = a.accept(this, arg);
     92 					if (result != null) {
     93 						return result;
     94 					}
     95 				}
     96 			}
     97 		}
     98 		if (n.getMembers() != null) {
     99 			for (final BodyDeclaration member : n.getMembers()) {
    100 				{
    101 					R result = member.accept(this, arg);
    102 					if (result != null) {
    103 						return result;
    104 					}
    105 				}
    106 			}
    107 		}
    108 		return null;
    109 	}
    110 
    111 	@Override
    112 	public R visit(final AnnotationMemberDeclaration n, final A arg) {
    113 		if (n.getJavaDoc() != null) {
    114 			{
    115 				R result = n.getJavaDoc().accept(this, arg);
    116 				if (result != null) {
    117 					return result;
    118 				}
    119 			}
    120 		}
    121 		if (n.getAnnotations() != null) {
    122 			for (final AnnotationExpr a : n.getAnnotations()) {
    123 				{
    124 					R result = a.accept(this, arg);
    125 					if (result != null) {
    126 						return result;
    127 					}
    128 				}
    129 			}
    130 		}
    131 		{
    132 			R result = n.getType().accept(this, arg);
    133 			if (result != null) {
    134 				return result;
    135 			}
    136 		}
    137 		if (n.getDefaultValue() != null) {
    138 			{
    139 				R result = n.getDefaultValue().accept(this, arg);
    140 				if (result != null) {
    141 					return result;
    142 				}
    143 			}
    144 		}
    145 		return null;
    146 	}
    147 
    148 	@Override
    149 	public R visit(final ArrayAccessExpr n, final A arg) {
    150 		{
    151 			R result = n.getName().accept(this, arg);
    152 			if (result != null) {
    153 				return result;
    154 			}
    155 		}
    156 		{
    157 			R result = n.getIndex().accept(this, arg);
    158 			if (result != null) {
    159 				return result;
    160 			}
    161 		}
    162 		return null;
    163 	}
    164 
    165 	@Override
    166 	public R visit(final ArrayCreationExpr n, final A arg) {
    167 		{
    168 			R result = n.getType().accept(this, arg);
    169 			if (result != null) {
    170 				return result;
    171 			}
    172 		}
    173 		if (n.getDimensions() != null) {
    174 			for (final Expression dim : n.getDimensions()) {
    175 				{
    176 					R result = dim.accept(this, arg);
    177 					if (result != null) {
    178 						return result;
    179 					}
    180 				}
    181 			}
    182 		} else {
    183 			{
    184 				R result = n.getInitializer().accept(this, arg);
    185 				if (result != null) {
    186 					return result;
    187 				}
    188 			}
    189 		}
    190 		return null;
    191 	}
    192 
    193 	@Override
    194 	public R visit(final ArrayInitializerExpr n, final A arg) {
    195 		if (n.getValues() != null) {
    196 			for (final Expression expr : n.getValues()) {
    197 				{
    198 					R result = expr.accept(this, arg);
    199 					if (result != null) {
    200 						return result;
    201 					}
    202 				}
    203 			}
    204 		}
    205 		return null;
    206 	}
    207 
    208 	@Override
    209 	public R visit(final AssertStmt n, final A arg) {
    210 		{
    211 			R result = n.getCheck().accept(this, arg);
    212 			if (result != null) {
    213 				return result;
    214 			}
    215 		}
    216 		if (n.getMessage() != null) {
    217 			{
    218 				R result = n.getMessage().accept(this, arg);
    219 				if (result != null) {
    220 					return result;
    221 				}
    222 			}
    223 		}
    224 		return null;
    225 	}
    226 
    227 	@Override
    228 	public R visit(final AssignExpr n, final A arg) {
    229 		{
    230 			R result = n.getTarget().accept(this, arg);
    231 			if (result != null) {
    232 				return result;
    233 			}
    234 		}
    235 		{
    236 			R result = n.getValue().accept(this, arg);
    237 			if (result != null) {
    238 				return result;
    239 			}
    240 		}
    241 		return null;
    242 	}
    243 
    244 	@Override
    245 	public R visit(final BinaryExpr n, final A arg) {
    246 		{
    247 			R result = n.getLeft().accept(this, arg);
    248 			if (result != null) {
    249 				return result;
    250 			}
    251 		}
    252 		{
    253 			R result = n.getRight().accept(this, arg);
    254 			if (result != null) {
    255 				return result;
    256 			}
    257 		}
    258 		return null;
    259 	}
    260 
    261 	@Override
    262 	public R visit(final BlockStmt n, final A arg) {
    263 		if (n.getStmts() != null) {
    264 			for (final Statement s : n.getStmts()) {
    265 				{
    266 					R result = s.accept(this, arg);
    267 					if (result != null) {
    268 						return result;
    269 					}
    270 				}
    271 			}
    272 		}
    273 		return null;
    274 
    275 	}
    276 
    277 	@Override
    278 	public R visit(final BooleanLiteralExpr n, final A arg) {
    279 		return null;
    280 	}
    281 
    282 	@Override
    283 	public R visit(final BreakStmt n, final A arg) {
    284 		return null;
    285 	}
    286 
    287 	@Override
    288 	public R visit(final CastExpr n, final A arg) {
    289 		{
    290 			R result = n.getType().accept(this, arg);
    291 			if (result != null) {
    292 				return result;
    293 			}
    294 		}
    295 		{
    296 			R result = n.getExpr().accept(this, arg);
    297 			if (result != null) {
    298 				return result;
    299 			}
    300 		}
    301 		return null;
    302 	}
    303 
    304 	@Override
    305 	public R visit(final CatchClause n, final A arg) {
    306 		{
    307 			R result = n.getExcept().accept(this, arg);
    308 			if (result != null) {
    309 				return result;
    310 			}
    311 		}
    312 		{
    313 			R result = n.getCatchBlock().accept(this, arg);
    314 			if (result != null) {
    315 				return result;
    316 			}
    317 		}
    318 		return null;
    319 
    320 	}
    321 
    322 	@Override
    323 	public R visit(final CharLiteralExpr n, final A arg) {
    324 		return null;
    325 	}
    326 
    327 	@Override
    328 	public R visit(final ClassExpr n, final A arg) {
    329 		{
    330 			R result = n.getType().accept(this, arg);
    331 			if (result != null) {
    332 				return result;
    333 			}
    334 		}
    335 		return null;
    336 	}
    337 
    338 	@Override
    339 	public R visit(final ClassOrInterfaceDeclaration n, final A arg) {
    340 		if (n.getJavaDoc() != null) {
    341 			{
    342 				R result = n.getJavaDoc().accept(this, arg);
    343 				if (result != null) {
    344 					return result;
    345 				}
    346 			}
    347 		}
    348 		if (n.getAnnotations() != null) {
    349 			for (final AnnotationExpr a : n.getAnnotations()) {
    350 				{
    351 					R result = a.accept(this, arg);
    352 					if (result != null) {
    353 						return result;
    354 					}
    355 				}
    356 			}
    357 		}
    358 		if (n.getTypeParameters() != null) {
    359 			for (final TypeParameter t : n.getTypeParameters()) {
    360 				{
    361 					R result = t.accept(this, arg);
    362 					if (result != null) {
    363 						return result;
    364 					}
    365 				}
    366 			}
    367 		}
    368 		if (n.getExtends() != null) {
    369 			for (final ClassOrInterfaceType c : n.getExtends()) {
    370 				{
    371 					R result = c.accept(this, arg);
    372 					if (result != null) {
    373 						return result;
    374 					}
    375 				}
    376 			}
    377 		}
    378 
    379 		if (n.getImplements() != null) {
    380 			for (final ClassOrInterfaceType c : n.getImplements()) {
    381 				{
    382 					R result = c.accept(this, arg);
    383 					if (result != null) {
    384 						return result;
    385 					}
    386 				}
    387 			}
    388 		}
    389 		if (n.getMembers() != null) {
    390 			for (final BodyDeclaration member : n.getMembers()) {
    391 				{
    392 					R result = member.accept(this, arg);
    393 					if (result != null) {
    394 						return result;
    395 					}
    396 				}
    397 			}
    398 		}
    399 		return null;
    400 	}
    401 
    402 	@Override
    403 	public R visit(final ClassOrInterfaceType n, final A arg) {
    404 		if (n.getScope() != null) {
    405 			{
    406 				R result = n.getScope().accept(this, arg);
    407 				if (result != null) {
    408 					return result;
    409 				}
    410 			}
    411 		}
    412 		if (n.getTypeArgs() != null) {
    413 			for (final Type t : n.getTypeArgs()) {
    414 				{
    415 					R result = t.accept(this, arg);
    416 					if (result != null) {
    417 						return result;
    418 					}
    419 				}
    420 			}
    421 		}
    422 		return null;
    423 	}
    424 
    425 	@Override
    426 	public R visit(final CompilationUnit n, final A arg) {
    427 		if (n.getPackage() != null) {
    428 			{
    429 				R result = n.getPackage().accept(this, arg);
    430 				if (result != null) {
    431 					return result;
    432 				}
    433 			}
    434 		}
    435 		if (n.getImports() != null) {
    436 			for (final ImportDeclaration i : n.getImports()) {
    437 				{
    438 					R result = i.accept(this, arg);
    439 					if (result != null) {
    440 						return result;
    441 					}
    442 				}
    443 			}
    444 		}
    445 		if (n.getTypes() != null) {
    446 			for (final TypeDeclaration typeDeclaration : n.getTypes()) {
    447 				{
    448 					R result = typeDeclaration.accept(this, arg);
    449 					if (result != null) {
    450 						return result;
    451 					}
    452 				}
    453 			}
    454 		}
    455 		return null;
    456 	}
    457 
    458 	@Override
    459 	public R visit(final ConditionalExpr n, final A arg) {
    460 		{
    461 			R result = n.getCondition().accept(this, arg);
    462 			if (result != null) {
    463 				return result;
    464 			}
    465 		}
    466 		{
    467 			R result = n.getThenExpr().accept(this, arg);
    468 			if (result != null) {
    469 				return result;
    470 			}
    471 		}
    472 		{
    473 			R result = n.getElseExpr().accept(this, arg);
    474 			if (result != null) {
    475 				return result;
    476 			}
    477 		}
    478 		return null;
    479 	}
    480 
    481 	@Override
    482 	public R visit(final ConstructorDeclaration n, final A arg) {
    483 		if (n.getJavaDoc() != null) {
    484 			{
    485 				R result = n.getJavaDoc().accept(this, arg);
    486 				if (result != null) {
    487 					return result;
    488 				}
    489 			}
    490 		}
    491 		if (n.getAnnotations() != null) {
    492 			for (final AnnotationExpr a : n.getAnnotations()) {
    493 				{
    494 					R result = a.accept(this, arg);
    495 					if (result != null) {
    496 						return result;
    497 					}
    498 				}
    499 			}
    500 		}
    501 		if (n.getTypeParameters() != null) {
    502 			for (final TypeParameter t : n.getTypeParameters()) {
    503 				{
    504 					R result = t.accept(this, arg);
    505 					if (result != null) {
    506 						return result;
    507 					}
    508 				}
    509 			}
    510 		}
    511 		if (n.getParameters() != null) {
    512 			for (final Parameter p : n.getParameters()) {
    513 				{
    514 					R result = p.accept(this, arg);
    515 					if (result != null) {
    516 						return result;
    517 					}
    518 				}
    519 			}
    520 		}
    521 		if (n.getThrows() != null) {
    522 			for (final NameExpr name : n.getThrows()) {
    523 				{
    524 					R result = name.accept(this, arg);
    525 					if (result != null) {
    526 						return result;
    527 					}
    528 				}
    529 			}
    530 		}
    531 		{
    532 			R result = n.getBlock().accept(this, arg);
    533 			if (result != null) {
    534 				return result;
    535 			}
    536 		}
    537 		return null;
    538 	}
    539 
    540 	@Override
    541 	public R visit(final ContinueStmt n, final A arg) {
    542 		return null;
    543 	}
    544 
    545 	@Override
    546 	public R visit(final DoStmt n, final A arg) {
    547 		{
    548 			R result = n.getBody().accept(this, arg);
    549 			if (result != null) {
    550 				return result;
    551 			}
    552 		}
    553 		{
    554 			R result = n.getCondition().accept(this, arg);
    555 			if (result != null) {
    556 				return result;
    557 			}
    558 		}
    559 		return null;
    560 	}
    561 
    562 	@Override
    563 	public R visit(final DoubleLiteralExpr n, final A arg) {
    564 		return null;
    565 	}
    566 
    567 	@Override
    568 	public R visit(final EmptyMemberDeclaration n, final A arg) {
    569 		if (n.getJavaDoc() != null) {
    570 			{
    571 				R result = n.getJavaDoc().accept(this, arg);
    572 				if (result != null) {
    573 					return result;
    574 				}
    575 			}
    576 		}
    577 		return null;
    578 	}
    579 
    580 	@Override
    581 	public R visit(final EmptyStmt n, final A arg) {
    582 		return null;
    583 	}
    584 
    585 	@Override
    586 	public R visit(final EmptyTypeDeclaration n, final A arg) {
    587 		if (n.getJavaDoc() != null) {
    588 			{
    589 				R result = n.getJavaDoc().accept(this, arg);
    590 				if (result != null) {
    591 					return result;
    592 				}
    593 			}
    594 		}
    595 		return null;
    596 	}
    597 
    598 	@Override
    599 	public R visit(final EnclosedExpr n, final A arg) {
    600 		{
    601 			R result = n.getInner().accept(this, arg);
    602 			if (result != null) {
    603 				return result;
    604 			}
    605 		}
    606 		return null;
    607 	}
    608 
    609 	@Override
    610 	public R visit(final EnumConstantDeclaration n, final A arg) {
    611 		if (n.getJavaDoc() != null) {
    612 			{
    613 				R result = n.getJavaDoc().accept(this, arg);
    614 				if (result != null) {
    615 					return result;
    616 				}
    617 			}
    618 		}
    619 		if (n.getAnnotations() != null) {
    620 			for (final AnnotationExpr a : n.getAnnotations()) {
    621 				{
    622 					R result = a.accept(this, arg);
    623 					if (result != null) {
    624 						return result;
    625 					}
    626 				}
    627 			}
    628 		}
    629 		if (n.getArgs() != null) {
    630 			for (final Expression e : n.getArgs()) {
    631 				{
    632 					R result = e.accept(this, arg);
    633 					if (result != null) {
    634 						return result;
    635 					}
    636 				}
    637 			}
    638 		}
    639 		if (n.getClassBody() != null) {
    640 			for (final BodyDeclaration member : n.getClassBody()) {
    641 				{
    642 					R result = member.accept(this, arg);
    643 					if (result != null) {
    644 						return result;
    645 					}
    646 				}
    647 			}
    648 		}
    649 		return null;
    650 	}
    651 
    652 	@Override
    653 	public R visit(final EnumDeclaration n, final A arg) {
    654 		if (n.getJavaDoc() != null) {
    655 			{
    656 				R result = n.getJavaDoc().accept(this, arg);
    657 				if (result != null) {
    658 					return result;
    659 				}
    660 			}
    661 		}
    662 		if (n.getAnnotations() != null) {
    663 			for (final AnnotationExpr a : n.getAnnotations()) {
    664 				{
    665 					R result = a.accept(this, arg);
    666 					if (result != null) {
    667 						return result;
    668 					}
    669 				}
    670 			}
    671 		}
    672 		if (n.getImplements() != null) {
    673 			for (final ClassOrInterfaceType c : n.getImplements()) {
    674 				{
    675 					R result = c.accept(this, arg);
    676 					if (result != null) {
    677 						return result;
    678 					}
    679 				}
    680 			}
    681 		}
    682 		if (n.getEntries() != null) {
    683 			for (final EnumConstantDeclaration e : n.getEntries()) {
    684 				{
    685 					R result = e.accept(this, arg);
    686 					if (result != null) {
    687 						return result;
    688 					}
    689 				}
    690 			}
    691 		}
    692 		if (n.getMembers() != null) {
    693 			for (final BodyDeclaration member : n.getMembers()) {
    694 				{
    695 					R result = member.accept(this, arg);
    696 					if (result != null) {
    697 						return result;
    698 					}
    699 				}
    700 			}
    701 		}
    702 		return null;
    703 	}
    704 
    705 	@Override
    706 	public R visit(final ExplicitConstructorInvocationStmt n, final A arg) {
    707 		if (!n.isThis()) {
    708 			if (n.getExpr() != null) {
    709 				{
    710 					R result = n.getExpr().accept(this, arg);
    711 					if (result != null) {
    712 						return result;
    713 					}
    714 				}
    715 			}
    716 		}
    717 		if (n.getTypeArgs() != null) {
    718 			for (final Type t : n.getTypeArgs()) {
    719 				{
    720 					R result = t.accept(this, arg);
    721 					if (result != null) {
    722 						return result;
    723 					}
    724 				}
    725 			}
    726 		}
    727 		if (n.getArgs() != null) {
    728 			for (final Expression e : n.getArgs()) {
    729 				{
    730 					R result = e.accept(this, arg);
    731 					if (result != null) {
    732 						return result;
    733 					}
    734 				}
    735 			}
    736 		}
    737 		return null;
    738 	}
    739 
    740 	@Override
    741 	public R visit(final ExpressionStmt n, final A arg) {
    742 		{
    743 			R result = n.getExpression().accept(this, arg);
    744 			if (result != null) {
    745 				return result;
    746 			}
    747 		}
    748 		return null;
    749 	}
    750 
    751 	@Override
    752 	public R visit(final FieldAccessExpr n, final A arg) {
    753 		{
    754 			R result = n.getScope().accept(this, arg);
    755 			if (result != null) {
    756 				return result;
    757 			}
    758 		}
    759 		return null;
    760 	}
    761 
    762 	@Override
    763 	public R visit(final FieldDeclaration n, final A arg) {
    764 		if (n.getJavaDoc() != null) {
    765 			{
    766 				R result = n.getJavaDoc().accept(this, arg);
    767 				if (result != null) {
    768 					return result;
    769 				}
    770 			}
    771 		}
    772 		if (n.getAnnotations() != null) {
    773 			for (final AnnotationExpr a : n.getAnnotations()) {
    774 				{
    775 					R result = a.accept(this, arg);
    776 					if (result != null) {
    777 						return result;
    778 					}
    779 				}
    780 			}
    781 		}
    782 		{
    783 			R result = n.getType().accept(this, arg);
    784 			if (result != null) {
    785 				return result;
    786 			}
    787 		}
    788 		for (final VariableDeclarator var : n.getVariables()) {
    789 			{
    790 				R result = var.accept(this, arg);
    791 				if (result != null) {
    792 					return result;
    793 				}
    794 			}
    795 		}
    796 		return null;
    797 	}
    798 
    799 	@Override
    800 	public R visit(final ForeachStmt n, final A arg) {
    801 		{
    802 			R result = n.getVariable().accept(this, arg);
    803 			if (result != null) {
    804 				return result;
    805 			}
    806 		}
    807 		{
    808 			R result = n.getIterable().accept(this, arg);
    809 			if (result != null) {
    810 				return result;
    811 			}
    812 		}
    813 		{
    814 			R result = n.getBody().accept(this, arg);
    815 			if (result != null) {
    816 				return result;
    817 			}
    818 		}
    819 		return null;
    820 	}
    821 
    822 	@Override
    823 	public R visit(final ForStmt n, final A arg) {
    824 		if (n.getInit() != null) {
    825 			for (final Expression e : n.getInit()) {
    826 				{
    827 					R result = e.accept(this, arg);
    828 					if (result != null) {
    829 						return result;
    830 					}
    831 				}
    832 			}
    833 		}
    834 		if (n.getCompare() != null) {
    835 			{
    836 				R result = n.getCompare().accept(this, arg);
    837 				if (result != null) {
    838 					return result;
    839 				}
    840 			}
    841 		}
    842 		if (n.getUpdate() != null) {
    843 			for (final Expression e : n.getUpdate()) {
    844 				{
    845 					R result = e.accept(this, arg);
    846 					if (result != null) {
    847 						return result;
    848 					}
    849 				}
    850 			}
    851 		}
    852 		{
    853 			R result = n.getBody().accept(this, arg);
    854 			if (result != null) {
    855 				return result;
    856 			}
    857 		}
    858 		return null;
    859 	}
    860 
    861 	@Override
    862 	public R visit(final IfStmt n, final A arg) {
    863 		{
    864 			R result = n.getCondition().accept(this, arg);
    865 			if (result != null) {
    866 				return result;
    867 			}
    868 		}
    869 		{
    870 			R result = n.getThenStmt().accept(this, arg);
    871 			if (result != null) {
    872 				return result;
    873 			}
    874 		}
    875 		if (n.getElseStmt() != null) {
    876 			{
    877 				R result = n.getElseStmt().accept(this, arg);
    878 				if (result != null) {
    879 					return result;
    880 				}
    881 			}
    882 		}
    883 		return null;
    884 	}
    885 
    886 	@Override
    887 	public R visit(final ImportDeclaration n, final A arg) {
    888 		{
    889 			R result = n.getName().accept(this, arg);
    890 			if (result != null) {
    891 				return result;
    892 			}
    893 		}
    894 		return null;
    895 	}
    896 
    897 	@Override
    898 	public R visit(final InitializerDeclaration n, final A arg) {
    899 		if (n.getJavaDoc() != null) {
    900 			{
    901 				R result = n.getJavaDoc().accept(this, arg);
    902 				if (result != null) {
    903 					return result;
    904 				}
    905 			}
    906 		}
    907 		{
    908 			R result = n.getBlock().accept(this, arg);
    909 			if (result != null) {
    910 				return result;
    911 			}
    912 		}
    913 		return null;
    914 	}
    915 
    916 	@Override
    917 	public R visit(final InstanceOfExpr n, final A arg) {
    918 		{
    919 			R result = n.getExpr().accept(this, arg);
    920 			if (result != null) {
    921 				return result;
    922 			}
    923 		}
    924 		{
    925 			R result = n.getType().accept(this, arg);
    926 			if (result != null) {
    927 				return result;
    928 			}
    929 		}
    930 		return null;
    931 	}
    932 
    933 	@Override
    934 	public R visit(final IntegerLiteralExpr n, final A arg) {
    935 		return null;
    936 	}
    937 
    938 	@Override
    939 	public R visit(final IntegerLiteralMinValueExpr n, final A arg) {
    940 		return null;
    941 	}
    942 
    943 	@Override
    944 	public R visit(final JavadocComment n, final A arg) {
    945 		return null;
    946 	}
    947 
    948 	@Override
    949 	public R visit(final LabeledStmt n, final A arg) {
    950 		{
    951 			R result = n.getStmt().accept(this, arg);
    952 			if (result != null) {
    953 				return result;
    954 			}
    955 		}
    956 		return null;
    957 	}
    958 
    959 	@Override
    960 	public R visit(final LongLiteralExpr n, final A arg) {
    961 		return null;
    962 	}
    963 
    964 	@Override
    965 	public R visit(final LongLiteralMinValueExpr n, final A arg) {
    966 		return null;
    967 	}
    968 
    969 	@Override
    970 	public R visit(final MarkerAnnotationExpr n, final A arg) {
    971 		{
    972 			R result = n.getName().accept(this, arg);
    973 			if (result != null) {
    974 				return result;
    975 			}
    976 		}
    977 		return null;
    978 	}
    979 
    980 	@Override
    981 	public R visit(final MemberValuePair n, final A arg) {
    982 		{
    983 			R result = n.getValue().accept(this, arg);
    984 			if (result != null) {
    985 				return result;
    986 			}
    987 		}
    988 		return null;
    989 	}
    990 
    991 	@Override
    992 	public R visit(final MethodCallExpr n, final A arg) {
    993 		if (n.getScope() != null) {
    994 			{
    995 				R result = n.getScope().accept(this, arg);
    996 				if (result != null) {
    997 					return result;
    998 				}
    999 			}
   1000 		}
   1001 		if (n.getTypeArgs() != null) {
   1002 			for (final Type t : n.getTypeArgs()) {
   1003 				{
   1004 					R result = t.accept(this, arg);
   1005 					if (result != null) {
   1006 						return result;
   1007 					}
   1008 				}
   1009 			}
   1010 		}
   1011 		if (n.getArgs() != null) {
   1012 			for (final Expression e : n.getArgs()) {
   1013 				{
   1014 					R result = e.accept(this, arg);
   1015 					if (result != null) {
   1016 						return result;
   1017 					}
   1018 				}
   1019 			}
   1020 		}
   1021 		return null;
   1022 	}
   1023 
   1024 	@Override
   1025 	public R visit(final MethodDeclaration n, final A arg) {
   1026 		if (n.getJavaDoc() != null) {
   1027 			{
   1028 				R result = n.getJavaDoc().accept(this, arg);
   1029 				if (result != null) {
   1030 					return result;
   1031 				}
   1032 			}
   1033 		}
   1034 		if (n.getAnnotations() != null) {
   1035 			for (final AnnotationExpr a : n.getAnnotations()) {
   1036 				{
   1037 					R result = a.accept(this, arg);
   1038 					if (result != null) {
   1039 						return result;
   1040 					}
   1041 				}
   1042 			}
   1043 		}
   1044 		if (n.getTypeParameters() != null) {
   1045 			for (final TypeParameter t : n.getTypeParameters()) {
   1046 				{
   1047 					R result = t.accept(this, arg);
   1048 					if (result != null) {
   1049 						return result;
   1050 					}
   1051 				}
   1052 			}
   1053 		}
   1054 		{
   1055 			R result = n.getType().accept(this, arg);
   1056 			if (result != null) {
   1057 				return result;
   1058 			}
   1059 		}
   1060 		if (n.getParameters() != null) {
   1061 			for (final Parameter p : n.getParameters()) {
   1062 				{
   1063 					R result = p.accept(this, arg);
   1064 					if (result != null) {
   1065 						return result;
   1066 					}
   1067 				}
   1068 			}
   1069 		}
   1070 		if (n.getThrows() != null) {
   1071 			for (final NameExpr name : n.getThrows()) {
   1072 				{
   1073 					R result = name.accept(this, arg);
   1074 					if (result != null) {
   1075 						return result;
   1076 					}
   1077 				}
   1078 			}
   1079 		}
   1080 		if (n.getBody() != null) {
   1081 			{
   1082 				R result = n.getBody().accept(this, arg);
   1083 				if (result != null) {
   1084 					return result;
   1085 				}
   1086 			}
   1087 		}
   1088 		return null;
   1089 	}
   1090 
   1091 	@Override
   1092 	public R visit(final NameExpr n, final A arg) {
   1093 		return null;
   1094 	}
   1095 
   1096 	@Override
   1097 	public R visit(final NormalAnnotationExpr n, final A arg) {
   1098 		{
   1099 			R result = n.getName().accept(this, arg);
   1100 			if (result != null) {
   1101 				return result;
   1102 			}
   1103 		}
   1104 		if (n.getPairs() != null) {
   1105 			for (final MemberValuePair m : n.getPairs()) {
   1106 				{
   1107 					R result = m.accept(this, arg);
   1108 					if (result != null) {
   1109 						return result;
   1110 					}
   1111 				}
   1112 			}
   1113 		}
   1114 		return null;
   1115 	}
   1116 
   1117 	@Override
   1118 	public R visit(final NullLiteralExpr n, final A arg) {
   1119 		return null;
   1120 	}
   1121 
   1122 	@Override
   1123 	public R visit(final ObjectCreationExpr n, final A arg) {
   1124 		if (n.getScope() != null) {
   1125 			{
   1126 				R result = n.getScope().accept(this, arg);
   1127 				if (result != null) {
   1128 					return result;
   1129 				}
   1130 			}
   1131 		}
   1132 		if (n.getTypeArgs() != null) {
   1133 			for (final Type t : n.getTypeArgs()) {
   1134 				{
   1135 					R result = t.accept(this, arg);
   1136 					if (result != null) {
   1137 						return result;
   1138 					}
   1139 				}
   1140 			}
   1141 		}
   1142 		{
   1143 			R result = n.getType().accept(this, arg);
   1144 			if (result != null) {
   1145 				return result;
   1146 			}
   1147 		}
   1148 		if (n.getArgs() != null) {
   1149 			for (final Expression e : n.getArgs()) {
   1150 				{
   1151 					R result = e.accept(this, arg);
   1152 					if (result != null) {
   1153 						return result;
   1154 					}
   1155 				}
   1156 			}
   1157 		}
   1158 		if (n.getAnonymousClassBody() != null) {
   1159 			for (final BodyDeclaration member : n.getAnonymousClassBody()) {
   1160 				{
   1161 					R result = member.accept(this, arg);
   1162 					if (result != null) {
   1163 						return result;
   1164 					}
   1165 				}
   1166 			}
   1167 		}
   1168 		return null;
   1169 	}
   1170 
   1171 	@Override
   1172 	public R visit(final PackageDeclaration n, final A arg) {
   1173 		if (n.getAnnotations() != null) {
   1174 			for (final AnnotationExpr a : n.getAnnotations()) {
   1175 				{
   1176 					R result = a.accept(this, arg);
   1177 					if (result != null) {
   1178 						return result;
   1179 					}
   1180 				}
   1181 			}
   1182 		}
   1183 		{
   1184 			R result = n.getName().accept(this, arg);
   1185 			if (result != null) {
   1186 				return result;
   1187 			}
   1188 		}
   1189 		return null;
   1190 	}
   1191 
   1192 	@Override
   1193 	public R visit(final Parameter n, final A arg) {
   1194 		if (n.getAnnotations() != null) {
   1195 			for (final AnnotationExpr a : n.getAnnotations()) {
   1196 				{
   1197 					R result = a.accept(this, arg);
   1198 					if (result != null) {
   1199 						return result;
   1200 					}
   1201 				}
   1202 			}
   1203 		}
   1204 		{
   1205 			R result = n.getType().accept(this, arg);
   1206 			if (result != null) {
   1207 				return result;
   1208 			}
   1209 		}
   1210 		{
   1211 			R result = n.getId().accept(this, arg);
   1212 			if (result != null) {
   1213 				return result;
   1214 			}
   1215 		}
   1216 		return null;
   1217 	}
   1218 
   1219 	@Override
   1220 	public R visit(final MultiTypeParameter n, final A arg) {
   1221 		if (n.getAnnotations() != null) {
   1222 			for (final AnnotationExpr a : n.getAnnotations()) {
   1223 				{
   1224 					R result = a.accept(this, arg);
   1225 					if (result != null) {
   1226 						return result;
   1227 					}
   1228 				}
   1229 			}
   1230 		}
   1231 		{
   1232 			for (final Type type : n.getTypes()) {
   1233 				R result = type.accept(this, arg);
   1234 				if (result != null) {
   1235 					return result;
   1236 				}
   1237 			}
   1238 		}
   1239 		{
   1240 			R result = n.getId().accept(this, arg);
   1241 			if (result != null) {
   1242 				return result;
   1243 			}
   1244 		}
   1245 		return null;
   1246 	}
   1247 
   1248 	@Override
   1249 	public R visit(final PrimitiveType n, final A arg) {
   1250 		return null;
   1251 	}
   1252 
   1253 	@Override
   1254 	public R visit(final QualifiedNameExpr n, final A arg) {
   1255 		{
   1256 			R result = n.getQualifier().accept(this, arg);
   1257 			if (result != null) {
   1258 				return result;
   1259 			}
   1260 		}
   1261 		return null;
   1262 	}
   1263 
   1264 	@Override
   1265 	public R visit(final ReferenceType n, final A arg) {
   1266 		{
   1267 			R result = n.getType().accept(this, arg);
   1268 			if (result != null) {
   1269 				return result;
   1270 			}
   1271 		}
   1272 		return null;
   1273 	}
   1274 
   1275 	@Override
   1276 	public R visit(final ReturnStmt n, final A arg) {
   1277 		if (n.getExpr() != null) {
   1278 			{
   1279 				R result = n.getExpr().accept(this, arg);
   1280 				if (result != null) {
   1281 					return result;
   1282 				}
   1283 			}
   1284 		}
   1285 		return null;
   1286 	}
   1287 
   1288 	@Override
   1289 	public R visit(final SingleMemberAnnotationExpr n, final A arg) {
   1290 		{
   1291 			R result = n.getName().accept(this, arg);
   1292 			if (result != null) {
   1293 				return result;
   1294 			}
   1295 		}
   1296 		{
   1297 			R result = n.getMemberValue().accept(this, arg);
   1298 			if (result != null) {
   1299 				return result;
   1300 			}
   1301 		}
   1302 		return null;
   1303 	}
   1304 
   1305 	@Override
   1306 	public R visit(final StringLiteralExpr n, final A arg) {
   1307 		return null;
   1308 	}
   1309 
   1310 	@Override
   1311 	public R visit(final SuperExpr n, final A arg) {
   1312 		if (n.getClassExpr() != null) {
   1313 			{
   1314 				R result = n.getClassExpr().accept(this, arg);
   1315 				if (result != null) {
   1316 					return result;
   1317 				}
   1318 			}
   1319 		}
   1320 		return null;
   1321 	}
   1322 
   1323 	@Override
   1324 	public R visit(final SwitchEntryStmt n, final A arg) {
   1325 		if (n.getLabel() != null) {
   1326 			{
   1327 				R result = n.getLabel().accept(this, arg);
   1328 				if (result != null) {
   1329 					return result;
   1330 				}
   1331 			}
   1332 		}
   1333 		if (n.getStmts() != null) {
   1334 			for (final Statement s : n.getStmts()) {
   1335 				{
   1336 					R result = s.accept(this, arg);
   1337 					if (result != null) {
   1338 						return result;
   1339 					}
   1340 				}
   1341 			}
   1342 		}
   1343 		return null;
   1344 	}
   1345 
   1346 	@Override
   1347 	public R visit(final SwitchStmt n, final A arg) {
   1348 		{
   1349 			R result = n.getSelector().accept(this, arg);
   1350 			if (result != null) {
   1351 				return result;
   1352 			}
   1353 		}
   1354 		if (n.getEntries() != null) {
   1355 			for (final SwitchEntryStmt e : n.getEntries()) {
   1356 				{
   1357 					R result = e.accept(this, arg);
   1358 					if (result != null) {
   1359 						return result;
   1360 					}
   1361 				}
   1362 			}
   1363 		}
   1364 		return null;
   1365 
   1366 	}
   1367 
   1368 	@Override
   1369 	public R visit(final SynchronizedStmt n, final A arg) {
   1370 		{
   1371 			if (n.getExpr() != null) {
   1372 			    R result = n.getExpr().accept(this, arg);
   1373 			    if (result != null) {
   1374 				    return result;
   1375 			    }
   1376 			}
   1377 		}
   1378 		{
   1379 			R result = n.getBlock().accept(this, arg);
   1380 			if (result != null) {
   1381 				return result;
   1382 			}
   1383 		}
   1384 		return null;
   1385 	}
   1386 
   1387 	@Override
   1388 	public R visit(final ThisExpr n, final A arg) {
   1389 		if (n.getClassExpr() != null) {
   1390 			{
   1391 				R result = n.getClassExpr().accept(this, arg);
   1392 				if (result != null) {
   1393 					return result;
   1394 				}
   1395 			}
   1396 		}
   1397 		return null;
   1398 	}
   1399 
   1400 	@Override
   1401 	public R visit(final ThrowStmt n, final A arg) {
   1402 		{
   1403 			R result = n.getExpr().accept(this, arg);
   1404 			if (result != null) {
   1405 				return result;
   1406 			}
   1407 		}
   1408 		return null;
   1409 	}
   1410 
   1411 	@Override
   1412 	public R visit(final TryStmt n, final A arg) {
   1413 		if (n.getResources() != null) {
   1414 			for (final VariableDeclarationExpr v : n.getResources()) {
   1415 				{
   1416 					R result = v.accept(this, arg);
   1417 					if (result != null) {
   1418 						return result;
   1419 					}
   1420 				}
   1421 			}
   1422 		}
   1423 		{
   1424 			R result = n.getTryBlock().accept(this, arg);
   1425 			if (result != null) {
   1426 				return result;
   1427 			}
   1428 		}
   1429 		if (n.getCatchs() != null) {
   1430 			for (final CatchClause c : n.getCatchs()) {
   1431 				{
   1432 					R result = c.accept(this, arg);
   1433 					if (result != null) {
   1434 						return result;
   1435 					}
   1436 				}
   1437 			}
   1438 		}
   1439 		if (n.getFinallyBlock() != null) {
   1440 			{
   1441 				R result = n.getFinallyBlock().accept(this, arg);
   1442 				if (result != null) {
   1443 					return result;
   1444 				}
   1445 			}
   1446 		}
   1447 		return null;
   1448 	}
   1449 
   1450 	@Override
   1451 	public R visit(final TypeDeclarationStmt n, final A arg) {
   1452 		{
   1453 			R result = n.getTypeDeclaration().accept(this, arg);
   1454 			if (result != null) {
   1455 				return result;
   1456 			}
   1457 		}
   1458 		return null;
   1459 	}
   1460 
   1461 	@Override
   1462 	public R visit(final TypeParameter n, final A arg) {
   1463 		if (n.getTypeBound() != null) {
   1464 			for (final ClassOrInterfaceType c : n.getTypeBound()) {
   1465 				{
   1466 					R result = c.accept(this, arg);
   1467 					if (result != null) {
   1468 						return result;
   1469 					}
   1470 				}
   1471 			}
   1472 		}
   1473 		return null;
   1474 	}
   1475 
   1476 	@Override
   1477 	public R visit(final UnaryExpr n, final A arg) {
   1478 		{
   1479 			R result = n.getExpr().accept(this, arg);
   1480 			if (result != null) {
   1481 				return result;
   1482 			}
   1483 		}
   1484 		return null;
   1485 	}
   1486 
   1487 	@Override
   1488 	public R visit(final UnknownType n, final A arg) {
   1489 		return null;
   1490 	}
   1491 
   1492 	@Override
   1493 	public R visit(final VariableDeclarationExpr n, final A arg) {
   1494 		if (n.getAnnotations() != null) {
   1495 			for (final AnnotationExpr a : n.getAnnotations()) {
   1496 				{
   1497 					R result = a.accept(this, arg);
   1498 					if (result != null) {
   1499 						return result;
   1500 					}
   1501 				}
   1502 			}
   1503 		}
   1504 		{
   1505 			R result = n.getType().accept(this, arg);
   1506 			if (result != null) {
   1507 				return result;
   1508 			}
   1509 		}
   1510 		for (final VariableDeclarator v : n.getVars()) {
   1511 			{
   1512 				R result = v.accept(this, arg);
   1513 				if (result != null) {
   1514 					return result;
   1515 				}
   1516 			}
   1517 		}
   1518 		return null;
   1519 	}
   1520 
   1521 	@Override
   1522 	public R visit(final VariableDeclarator n, final A arg) {
   1523 		{
   1524 			R result = n.getId().accept(this, arg);
   1525 			if (result != null) {
   1526 				return result;
   1527 			}
   1528 		}
   1529 		if (n.getInit() != null) {
   1530 			{
   1531 				R result = n.getInit().accept(this, arg);
   1532 				if (result != null) {
   1533 					return result;
   1534 				}
   1535 			}
   1536 		}
   1537 		return null;
   1538 	}
   1539 
   1540 	@Override
   1541 	public R visit(final VariableDeclaratorId n, final A arg) {
   1542 		return null;
   1543 	}
   1544 
   1545 	@Override
   1546 	public R visit(final VoidType n, final A arg) {
   1547 		return null;
   1548 	}
   1549 
   1550 	@Override
   1551 	public R visit(final WhileStmt n, final A arg) {
   1552 		{
   1553 			R result = n.getCondition().accept(this, arg);
   1554 			if (result != null) {
   1555 				return result;
   1556 			}
   1557 		}
   1558 		{
   1559 			R result = n.getBody().accept(this, arg);
   1560 			if (result != null) {
   1561 				return result;
   1562 			}
   1563 		}
   1564 		return null;
   1565 	}
   1566 
   1567 	@Override
   1568 	public R visit(final WildcardType n, final A arg) {
   1569 		if (n.getExtends() != null) {
   1570 			{
   1571 				R result = n.getExtends().accept(this, arg);
   1572 				if (result != null) {
   1573 					return result;
   1574 				}
   1575 			}
   1576 		}
   1577 		if (n.getSuper() != null) {
   1578 			{
   1579 				R result = n.getSuper().accept(this, arg);
   1580 				if (result != null) {
   1581 					return result;
   1582 				}
   1583 			}
   1584 		}
   1585 		return null;
   1586 	}
   1587 
   1588     @Override
   1589     public R visit(LambdaExpr n, A arg) {
   1590         return null;
   1591     }
   1592 
   1593     @Override
   1594     public R visit(MethodReferenceExpr n, A arg){
   1595         return null;
   1596     }
   1597 
   1598     @Override
   1599     public R visit(TypeExpr n, A arg){
   1600         return null;
   1601     }
   1602 
   1603 	@Override
   1604 	public R visit(final BlockComment n, final A arg) {
   1605 		return null;
   1606 	}
   1607 
   1608 	@Override
   1609 	public R visit(final LineComment n, final A arg) {
   1610 		return null;
   1611 	}
   1612 
   1613 }
   1614