@Override
 public void visit(final MethodDeclaration n, final A arg) {
   visitComment(n.getComment(), arg);
   visitAnnotations(n, arg);
   if (n.getTypeParameters() != null) {
     for (final TypeParameter t : n.getTypeParameters()) {
       t.accept(this, arg);
     }
   }
   n.getElementType().accept(this, arg);
   n.getNameExpr().accept(this, arg);
   if (n.getParameters() != null) {
     for (final Parameter p : n.getParameters()) {
       p.accept(this, arg);
     }
   }
   if (n.getThrows() != null) {
     for (final ReferenceType name : n.getThrows()) {
       name.accept(this, arg);
     }
   }
   if (n.getBody() != null) {
     n.getBody().accept(this, arg);
   }
 }
 @Override
 public void visit(final TypeParameter n, final A arg) {
   visitComment(n.getComment(), arg);
   if (n.getTypeBound() != null) {
     for (final ClassOrInterfaceType c : n.getTypeBound()) {
       c.accept(this, arg);
     }
   }
 }
 @Override
 public void visit(final ClassOrInterfaceDeclaration n, final A arg) {
   visitComment(n.getComment(), arg);
   visitAnnotations(n, arg);
   n.getNameExpr().accept(this, arg);
   for (final TypeParameter t : n.getTypeParameters()) {
     t.accept(this, arg);
   }
   for (final ClassOrInterfaceType c : n.getExtends()) {
     c.accept(this, arg);
   }
   for (final ClassOrInterfaceType c : n.getImplements()) {
     c.accept(this, arg);
   }
   for (final BodyDeclaration<?> member : n.getMembers()) {
     member.accept(this, arg);
   }
 }